Dennis Lee Bieber wrote: > On Sun, 15 Jan 2006 20:50:59 -0500, "John M. Gabriele" > <[EMAIL PROTECTED]> declaimed the following in comp.lang.python: > > >>Sorry -- that question I wrote looks a little incomplete: what I meant >>to ask was, how does it help this code to work: >> >>---- code ---- >>#!/usr/bin/python >> >>class Parent( object ): >> def __init__( self ): >> self.x = 9 >> print "Inside Parent.__init__()" >> >> def wash_dishes( self ): >> print "Inside Parent.wash_dishes(), washing", self.x, "dishes." >> >> >>class Child( Parent ): >> def __init__( self ): >> super( Child, self ).__init__() >> print "Inside Child.__init__()" >> >> >>c = Child() >>c.wash_dishes() >>---- /code ---- >> >>since the x instance attribute created during the >>super( Child, self ).__init__() call is just part of what looks to be >>a temporary Parent instance.
(Whoops. I see now thanks to Dan Sommers' comment that there's no temp Parent instance, unless the call to super() is creating one...) > > Because you passed the CHILD INSTANCE (self) to the method of the > super... so "self.x" is "child-instance.x" Huh? But it sounds by the name of it that super() is supposed to return something like the superclass (i.e. Parent). You mean, that super( Child, self ).__init__() call inside Child.__init__() leads to Parent.__init__() getting called but with the 'self' reference inside there referring to the Child object we named 'c' instead of some Parent .... {confused} Wait a second. I can replace that super() call with simply Parent.__init__( self ) and everything still works... and it looks to me that, indeed, I'm passing self in (which refers to the Child object), and that self gets used in that __init__() method of Parent's... Wow. I'd never seen/understood that before! We're using superclass initializers on subclasses that weren't around when the superclass was written! I'm having a hard time finding the documentation to the super() function. I checked the language reference ( http://docs.python.org/ref/ref.html ) but didn't find it. Can someone please point me to the relevant docs on super? help( super ) doesn't give much info at all, except that super is actually a class, and calling it the way we are here returns a "bound super object", but I don't yet see what that means (though I know what bound methods are). Thanks, ---J -- (remove zeez if demunging email address) -- http://mail.python.org/mailman/listinfo/python-list