Multiple inheritance and a broken super() chain
Mats Wichmann
mats at wichmann.us
Mon Jul 3 15:06:03 EDT 2023
On 7/3/23 12:13, Mats Wichmann via Python-list wrote:
To natter on a bit, and possibly muddy the waters even further...
> Now, as I see it, from the super()'s point of view, there are two
> inheritance chains, one starting at Left and the other at Right. But
> *Right.__init__()* is called twice.
No: each class has just a single inheritance chain, built up when the
class object is constructed, to avoid going insane. Yes, the chain for
Left and for Right are different, but you're not instantiating *either*
of those classes when you make a Bottom, so they don't matter here.
You're just filling out a Bottom: it looks for init, finds it, and so
would stop hunting - but then the super() call there sends it to the
next class object in the chain to look for the method you told it to
(also init), where it would stop since it found it, except you sent it
on with another super(), and so on. Python is a bit... different :)
(compared to other languages with class definitions)
More information about the Python-list
mailing list