John Salerno wrote: > Steve Holden wrote: > > >>The methods do indeed look in their enclosing class, but only for >>self-relative references. These are sought first in the instance, then >>in the instance's class, then in the instance's class's superclass, and >>so on up to the ultimate superclass. In other words, all attribute >>lookup uses the method resolution order ... > > > So what I did is correct? It does work, but why don't I have to define > the list as self.menu_items as well?
The first point is that the name "self" isn't in scope at the point you make the assignment: it's a local variable (strictly, it's a parameter, but they are treated the same as locals) to each method, and when the method is called it's a reference to the specific instance whose method was called (technically, the instance o which the method is bound). You could assign self.menu_items in the __init__() method, but it wouldn't really have any advantages given that names in class scope are reachable via the name resolution mechanism. Note that the def statement is also executed in class scope, which is why the method names are class-relative. Python has a special method binding feature that changes a call like instance.method(a1, a2) into (instance.__class__).method(instance, a1, a2) This is where the reference to self "magically" appears from in method calls. regards Steve -- Steve Holden +44 150 684 7255 +1 800 494 3119 Holden Web LLC/Ltd http://www.holdenweb.com Skype: holdenweb http://holdenweb.blogspot.com Recent Ramblings http://del.icio.us/steve.holden -- http://mail.python.org/mailman/listinfo/python-list