
On Fri, Jun 14, 2019 at 10:45:17AM -0700, Brett Cannon wrote:
I think the logic breaks down with multiple inheritance. If you make C(A, B), then you can say C > A and C > B, but then you can't say A > B or A < B which breaks sorting.
Just like sets, or floats, or anything other type that doesn't implement a total order. In practice, when was the last time you got bitten by the fact that sorting of sets or arbitrary floats is "broken"?
If you want to know if a B inherits from Base, then I think `Base in B.mro()` will cover that just as succinctly.
I wonder why we have issubclass when we can check the mro ourselves. Actually I've often wondered why we have both type.__mro__ and type.mro() and what the difference is. I don't think that "Base in B.mro()" (15 chars) is just as succinct as "Base >= B" (9 chars). And the strict parent check is worse: Base != B and Base in B.mro()" (29 chars) "Base > B" (8 chars, 6 if you leave out the spaces) It is hard to beat operators for succinctness. But I don't think the advantage of this is in minimizing the number of characters that need to be typed. I think the advantage is that people already think of parent/child class relationships in terms of > symbol representing superclass > subclass relationships. The big question in my mind is not whether this is good, useful, obvious syntax. I think it is. The question is whether it is good and useful *enough* to justify the feature. -- Steven