Steven D'Aprano wrote: > On Sat, 31 Jul 2010 14:25:39 +1200, Gregory Ewing wrote: > >> Steven D'Aprano wrote: >> >>> A >>> / \ >>> C B >>> \ / >>> D >>> / \ >>> E F >>> >>> Yes, a super call might jog left from C to B, but only when being >>> called from one of the lower classes D-F. That's still an upwards call >>> relative to the originator, not sidewards. >> >> But it's not an upward call relative to the class mentioned in the >> super() call, which is why I say it's misleading. > > Which class would that be? > > I think I'm going to need an example that demonstrates what you mean, > because I can't make heads or tails of it. Are you suggesting that a call > to super(C, self).method() from within C might call B.method(self)?
Yes, it would. class A(object): def test_mro(self): print "In A" class B(A): def test_mro(self): print "In B" super(B, self).test_mro() raise Exception() class C(A): def test_mro(self): print "In C" super(C, self).test_mro() class D(C, B): def test_mro(self): print "In D" super(D, self).test_mro() D().test_mro() Notice the exception being raised in B. This results in the following traceback: Traceback (most recent call last): File "mro.py", line 21, in <module> D().test_mro() File "mro.py", line 19, in test_mro super(D, self).test_mro() File "mro.py", line 14, in test_mro super(C, self).test_mro() File "mro.py", line 9, in test_mro raise Exception() Exception Since the idea of super() as I understand it is to make sure every class in an object's hierarchy gets its method called, there's really no way to implement super() in a way that didn't involve a non-superclass being called by some class's super() call. -- Brian -- http://mail.python.org/mailman/listinfo/python-list