On Sat, Mar 26, 2022 at 06:15:57PM -0000, malmiteria  wrote:

> class C(A, B):
>     pass
> ```
> 
> Today, a code such as ```C().method()``` works without any problems

Actually, no, it does not. Only the A.method() runs, because A was not 
designed for multiple-inheritance. C inherits from both A and B, but 
only calls one of the methods.


> except of course when the method you wanted to refer to was the method from B.

Why are you inheriting from A if you don't want to inherit from A?


> If class A and B both come from libraries you don't own, and for some 
> reason have each a method named the same (named run, for example) the 
> run method of C is silently ignoring the run method of B.

Right. Multiple inheritence in Python is **cooperative** -- all of the 
classes in question have to work together. If they don't, as A and B 
don't, bad things happen.

You can't just inherit from arbitrary classes that don't work together. 
"Uncooperative multiple inheritance" is an unsolvable problem, and is 
best refactored using composition instead.


-- 
Steve
_______________________________________________
Python-ideas mailing list -- python-ideas@python.org
To unsubscribe send an email to python-ideas-le...@python.org
https://mail.python.org/mailman3/lists/python-ideas.python.org/
Message archived at 
https://mail.python.org/archives/list/python-ideas@python.org/message/HVATCZIKQ642LF7IIB76S67EY3FVOLMV/
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to