newb __init__ inheritance

Peter Otten __peter__ at web.de
Thu Mar 8 12:03:25 EST 2012


Maarten wrote:
> Alternatively you can figure out the parent class with a call to super:

This is WRONG:
> super(self.__class__, self).__init__()

You have to name the current class explicitly. Consider:
>> class A(object):
... def __init__(self):
... print "in a"
... 
>>> class B(A):
... def __init__(self):
... print "in b"
... super(self.__class__, self).__init__() # wrong
... 
>>> class C(B): pass
... 
>>>
Can you figure out what C() will print? Try it out if you can't.
The corrected code:
>>> class B(A):
... def __init__(self):
... print "in b"
... super(B, self).__init__()
... 
>>> class C(B): pass
... 
>>> C()
in b
in a
<__main__.C object at 0x7fcfafd52b10>
In Python 3 you can call super() with no args; super().__init__() do the 
right thing there.


More information about the Python-list mailing list

AltStyle によって変換されたページ (->オリジナル) /