super() doesn't get superclass

Hrvoje Niksic hniksic at xemacs.org
Wed Sep 19 03:22:36 EDT 2007


Ben Finney <bignose+hates-spam at benfinney.id.au> writes:

> Hrvoje Niksic <hniksic at xemacs.org> writes:
>
>> class X(Y):
>>   def foo(self):
>>     super(X, self).foo()
>> 
>> ...there is in fact no guarantee that super() calls a superclass of
>> X.  However, it is certainly guaranteed that it will call a superclass
>> of type(self).
>
> Not even that. It could call *any class in the inheritance
> hierarchy*,

The inheritance hierarchiy is populated by the various (direct and
indirect) superclasses of type(self).

> depending on how the MRO has resolved "next class". Even one that is
> neither an ancestor nor a descendant of X.

My point exactly.  superclass of X is not the same as superclass of
type(self).  Super iterates over the latter, where you expect the
former.



More information about the Python-list mailing list