| The article is correct. In this interview (http://twit.tv/floss11) Guido states that Python has been OO from the outset (1990). The thing you have to understand is Ruby and Python do OO differently. To Python everything is a hash table. This isn't the case for Ruby and their differences mainly stem from that. It adds interesting elements like functions are very simple to pass around in Python because they are not bound to a class. It is still OO, just a different way of doing it. Guido has also repeated for years that passing around self isn't a technical necessity. He prefers it as part of Python's "explicit is better than implicit policy. What you have to understand is that a method call boils down to method(receiver, args...). Python just makes that explicit. Another quote from Guido: "Get rid of self: I think this has been addressed in the responses; it's not as easy as you'd think, and there are important advantages to the uniform interpretation of methods as "just functions that get called in a funky way". In Ruby, everything is a method, or an anonymous block, and there are no "free functions". Python uses the complimentary approach, treating functions as first-class citizens. Both approaches are complete; they are however incompatible, and you can't easily morph one into the other. (Personally, I find that the criticm of explicit self has about as much merit as the criticism of Python's use of whitespace.)" (http://www.artima.com/weblogs/viewpost.jsp?thread=214325) I too think it is kind of a silly argument. Passing around self has never been a problem for me. 4 more letters for each method. Not a problem, imo, in exchange for first-class functions. And super() in Python works fairly similar to super in Ruby AFAIK. For the record, Common Lisp users probably find both Python and Ruby's OO limited and clunky. Just got to keep in mind there's different ways of approaching it. |
It's great to know how and why Python is the way it is, but at the end of the day you can give a million reasons, but the kettle will still be black.
What you posted is like me explaining that (current) Ruby is not slow (which is a joke), it just implements threading differently...