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