multiple inharitance super() question
Peter Otten
__peter__ at web.de
Mon Nov 14 07:48:33 EST 2005
Alex Greif wrote:
> BUT what happens if B extends from A and AA like:
>
> class A(object):
> def __init__(self, args):
> ...
>
> class AA(object):
> def __init__(self, args):
> ...
>
> class B(A,AA):
> def __init__(self, args):
> super(B, self).__init__(args)
>
>
> How can I tell that B.__init__() should initialize A and AA?
> Or is the new super() so clever to call A.__init__() and AA.__init__()
> internally?
Yes but only if you put a super() call into A/AA.__init__().
class A(object):
def __init__(self, args):
print "init A"
super(A, self).__init__(args)
class AA(object):
def __init__(self, args):
print "init AA"
super(AA, self).__init__(args)
class B(A, AA):
def __init__(self, args):
print "init B"
super(B, self).__init__(args)
if __name__ == "__main__":
B(42)
The most significant constraint of that layout is that all __init__()
methods need compatible signatures.
Of course explicit invocation of baseclass initializers will continue to
work...
Peter
More information about the Python-list
mailing list