[Python-ideas] Consider (one day) adding an inheritance order class precedence mechanism
Neil Girdhar
mistersheik at gmail.com
Wed Nov 15 16:49:03 EST 2017
Sometimes I get MRO failures when defining classes. For example, if
R < E, C
B < S, E
S < C
Z < B, R
Then Z cannot be instantiated because C precedes E in B and E precedes C in
R. The problem is that when the inheritance graph was topologically-sorted
in B, the order was S, C, E. It could just as easily have been S, E, C.
So, one solution is to add C explicitly to B's base class list, but this is
annoying because B might not care about C (it's an implementation detail of
S). It also means that if the hierarchy changes, a lot of these added
extra base classes need to be fixed.
I propose adding a magic member to classes:
__precedes__ that is a list of classes. So, the fix for the above problem
would be to define E as follows:
class E:
from whatever import C
__precedes__ = [C]
Then, when topologically-sorting (so-called linearizing) the ancestor
classes, Python can try to ensure that E precedes C when defining B.
Best,
Neil
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-ideas/attachments/20171115/5fe9050a/attachment.html>
More information about the Python-ideas
mailing list