Method resolution for super(Class, obj).
bdesth.quelquechose at free.quelquepart.fr
Sun Sep 10 23:49:06 CEST 2006
ddtl a écrit :
> On 7 Sep 2006 10:42:54 -0700, in comp.lang.python you wrote:
>>Let's examine what the mro order is for class D:
>>[<class '__main__.D'>, <class '__main__.B'>, <class '__main__.C'>,
>>n__.A'>, <type 'object'>]
>>When you call d.met(), the call dispatches to the D.met() method.
>>After printing out 'D.met', you use super() to get the next class in
>>the mro order, and call that class's met method.
>>As shown with the mro(), the class after D is B. So B.met() is called.
>>Normally, we would be done. But take a look at B's method!
>>> def met(self):
>>> print 'B.met'
>>B.met calls super, and invokes the next met method! So, the code does
>>exactly what you've asked it to do, and searches for the next class
>>after B in the mro list: class C.
> But when super(B,self).met() is invoked, isn't it supposed to look
> at MRO order of *B*,
No. It's supposed to look at the MRO of self for what comes after B.
More information about the Python-list