instance attributes not inherited?
John M. Gabriele
john_sips_teaz at yahooz.com
Mon Jan 16 01:44:40 EST 2006
Dennis Lee Bieber wrote:
> On Sun, 15 Jan 2006 20:50:59 -0500, "John M. Gabriele"
> <john_sips_teaz at yahooz.com> 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)
More information about the Python-list
mailing list