hermy wrote: > As I understand it, using super() is the preferred way to call > the next method in method-resolution-order. When I have parameterless > __init__ methods, this works as expected. > However, how do you solve the following simple multiple inheritance > situation in python ? > > class A(object): > def __init__(self,x): > super(A,self).__init__(x) > print "A init (x=%s)" % x > > class B(object): > def __init__(self,y): > super(B,self).__init__(y) > print "B init (y=%s)" % y > > class C(A,B): > def __init__(self,x,y): > super(C,self).__init__(x,y) <-------- how to do this ??? > print "C init (x=%s,y=%s)" % (x,y)
Unfortunately, super() doesn't mix too well with hierarchies that change the number of arguments to a method. One possibility: class A(object): def __init__(self, x, **kwargs): super(A, self).__init__(x=x, **kwargs) print "A init (x=%s)" % x class B(object): def __init__(self, y, **kwargs): super(B, self).__init__(y=y, **kwargs) print "B init (y=%s)" % y class C(A,B): def __init__(self, x, y): super(C, self).__init__(x=x,y=y) print "C init (x=%s,y=%s)" % (x,y) Then you can get:: py> C(1, 2) B init (y=2) A init (x=1) C init (x=1,y=2) <__main__.C object at 0x00B9FA70> But you have to make sure to always pass the **kwargs around. STeVe -- http://mail.python.org/mailman/listinfo/python-list