John Gordon wrote: > In <0dc26f12-2541-4d41-8678-4fa53f347...@g9g2000yqb.googlegroups.com> "T. > Goodchild" <tgoodch...@gmail.com> writes: > >> So why is 'self' necessary on class methods? It seems to me that the >> most common practice is that class methods *almost always* operate on >> the instance that called them. It would make more sense to me if this >> was assumed by default, and for "static" methods (methods that are >> part of a class, but never associated with a specific instance) to be >> labelled instead. > >> Just curious about the rationale behind this part of the language. > > How would a method access instance variables without 'self'?
If Python had compile time declarations, the compiler could know whether x=1 was referring to a local variable x or an attribute x. The reader might not, but the compiler would :) By the way, although the Python docs are a little inconsistent, the usual term here is "attribute" rather than "instance variable". Attributes need not live on the instance: they can also live on the class, a superclass, or be computed at run-time via at least three different mechanisms I can think of (__getattribute__, __getattr__, properties). Local variables are treated a bit differently from attributes, but broadly speaking, if you need a dot to access something, it's an attribute, if you don't, it's a name binding (or variable). Python even has two different sorts of errors for "variable" lookup failures: NameError (or UnboundLocalError) for un-dotted names, and AttributeError for dotted names. > They probably could have made 'self' a magical attribute that just > appears out of thin air instead of being passed as an argument, like > 'this' in C++. But would that really provide any benefit? Well obviously the C++ people thought so :) The effort to type "self, " in method signatures is pretty low. I don't think it is a problem. But other languages are free to choose differently. Cobra, for example, is explicitly derived from Python in many ways, but it drops the "self" (as well as other changes). http://cobra-language.com/docs/python/ -- Steven -- http://mail.python.org/mailman/listinfo/python-list