QUERY · ISSUE
Method Resolution Order (MRO) is not compliant
py-core
uPy currently implements depth-first MRO, which is equivalent to one used pre-Python2.2.
References:
- http://python-history.blogspot.com/2010/06/method-resolution-order.html
- https://www.python.org/download/releases/2.3/mro/
CANDIDATE · ISSUE
To support multiple inheritance, should filter out "object" from base class spec and handle it as implicit fallback
bug
We're not going to get proper Python MRO any time soon (#525), but to at least not break multiple inheritance (MI) in obvious way, we should at least do following:
- Filter out "object" from any explicit base class specification. (turn
class Foo(object)intoclass Foo). - Look up attributes in "object" as a fallback.
This will emulate the fact that in Python3, "object" is always the last type in MRO.
Failing to do the above may mean, that with our naive depth-first MRO, "object" ultimate base of first superclass in MI case may seize method call destined to another superclass, if "object" has such method. With #520 & #606, object now implements __new__ and __init__, so any other multi-superclass will be denied construction and initialization.