Alan Gauld wrote: >>> The problem is that super appears to only work with single inheritance. > > >> That's ironic - super() is intended to ease some of the problems with >> multiple inheritance especially diamond patterns. Some docs are here: >> http://www.python.org/2.2.3/descrintro.html#cooperation >> >> The problem with the OP is that not all the classes involved use super(). > > I tried that. Before posting I went back and reread the super docs and > tried building an MI lattice but, whatever I did, super only ever called > the > first listed superclass. If it had a super it called its superclass but the > second superclasss never got initialised so far as I could tell!
Works for me. Each class must call super(...).__init__(). The first arg to super() must be the class in which the call appears. One mistake is to call super(self.__class__, self) - this is not correct. Here is an example: >>> class A(object): ... def __init__(self): ... print 'A.__init__()' ... super(A, self).__init__() ... >>> class B(object): ... def __init__(self): ... print 'B.__init__()' ... super(B, self).__init__() ... >>> class C(A, B): ... def __init__(self): ... print 'C.__init__()' ... super(C, self).__init__() ... >>> C() C.__init__() A.__init__() B.__init__() <__main__.C object at 0x00A32BB0> Kent _______________________________________________ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor