On Thu, Nov 16, 2017 at 1:11 AM Greg Ewing
Steven D'Aprano wrote:
These are not equivalent:
B < S, E B < E, S
Not in general, but in many cases they will be, e.g. if E and S have no method names in common. I think the OP is implying that his case is one of those.
Maybe what's really wanted is a way to say "B inherits from S and E, but it doesn't care what order they go in". Then the MRO generating algorithm could in principle swap them if it would result in a consistent MRO.
Interesting idea, but unfortunately, reordering base classes doesn't solve all of the problems that a precedence specification does. For example, the original example was: R < E, C B < S, E S < C Z < B, R If we make it slightly more complicated: class Y: pass class X(Y): pass class E(X): pass class C: pass class R(E, C): pass class S(C, Y): pass class B(S, E): pass class Z(B, R): pass Then, S and E can't be swapped.
Or maybe the MRO generator could decide for itself if the order of two base classes can be swapped by inspecting their attributes to see if any of them clash?
In general, I think that this would be a cool project, but is much hard than the user declaring a consistent order.
-- Greg _______________________________________________ Python-ideas mailing list Python-ideas@python.org https://mail.python.org/mailman/listinfo/python-ideas Code of Conduct: http://python.org/psf/codeofconduct/
--
--- You received this message because you are subscribed to a topic in the Google Groups "python-ideas" group. To unsubscribe from this topic, visit https://groups.google.com/d/topic/python-ideas/T7YNKZmwW1c/unsubscribe. To unsubscribe from this group and all its topics, send an email to python-ideas+unsubscribe@googlegroups.com. For more options, visit https://groups.google.com/d/optout.