>Which is fine so long as nobody else tries to add further subclasses later: > >class C(B): ... >class Mine(AB,C): ... > >Mine().f() > >Using super throughout this works (it calls f in Mine, AB, A, C, B, and >then Base), but your explicit call to the base classes means that if you >don't call C.f() explicitly from Mine it never gets called, and if you do >call it explicitly from Mine it gets called *after* B.f() has been called >(and B.f() probably ends up being called twice). > > Okay, I understand now. It was a good learning session for me. :-) At this moment I do not see a problem where I would need a diamond shaped inheritance graph but I'll keep in mind the difference between super and direct calls. :-)
I tested this and I realized that if you change the parameter list in the descendants then it is not wise to use super. I'm going to publish the example below, I hope others can learn from it too. Example (good): class A(object): def f(self): print "A.f called" class B(A): def f(self): super(B,self).f() print "B.f called" class C(A): def f(self): super(C,self).f() print "C.f called" class D(B,C): def f(self): super(D,self).f() print "D.f called" d = D() d.f() Results in: A.f called C.f called B.f called D.f called Example (bad): class B(A): def f(self,what): super(B,self).f() print "B.f called (%s)" % what Will result in: C:/Python24/pythonw.exe -u "C:/Python/Projects/Test4/test4.py" Traceback (most recent call last): File "C:/Python/Projects/Test4/test4.py", line 22, in ? d.f() File "C:/Python/Projects/Test4/test4.py", line 17, in f super(D,self).f() TypeError: f() takes exactly 2 arguments (1 given) Of course you cannot tell if super(C,self).f() will call A.f or not (when add another subclass under class A, it will change the MRO...) If you do not want to add any other subclasses then probably you can use super(C,self).f('foo') but in that case it is equivalent to A.f(self,'foo') Best, Laci 2.0 -- _________________________________________________________________ Laszlo Nagy web: http://designasign.biz IT Consultant mail: [EMAIL PROTECTED] Python forever! -- http://mail.python.org/mailman/listinfo/python-list