Guido van Rossum wrote: > I think it’s usually called Orderable. It’s a useful concept in static type > checking too (e.g. mypy), where we’d use it as an upper bound for type > variables, if we had it. I guess to exclude sets you’d have to introduce > TotalOrderable. > On Tue, Mar 3, 2020 at 04:03 Steve Jorgensen ste...@stevej.name wrote: > > I have encountered cases in which I would like to > > validate that an > > argument can be properly compared with other instances of its type. This is > > true of numbers, strings, dates, … but not for NoneClass, type, > > …. > > One way that I have tried to handle this is to check whether the object > > can be compared to itself using >, <, >=, > > and <= and that it is > > neither > or < itself and is both >= and > > <= itself. The most > > glaring example of why this is insufficient is the set type. A > > set > > object meets all of those criteria, but given any 2 instances, it is not > > true that if set a > b is False then a <= b > > is True. The operators > > are not acting as comparisons of relative magnitude in this case but as > > tests for superset/subset relations — which is fine and good but doesn't > > help with this situation. > > What I think would be helpful is to have a Magnitude abstract base class > > that is a subclass of ProtoMagnitude (or whatever better names anyone can > > imagine). > > The subclass hook for Magnitude would return True for any > > class with > > instance methods for all of the rich comparison methods, but it would skip > > that check and return False for any real or virtual subclass of > > ProtoMagnitude (overridable by registering as a Magnitude > > subclass). > > The, set type would then be registered as a virtual base class of > > ProtoMagnitude but not Magnitude so that issubclass(set, > > Magnitude) > > would return False. > > For performance optimization, the module that defines these ABCs would > > register the obviously appropriate built-in and standard-lib types with > > Magnitude: Number, str, list, > > tuple, date, … > > Why not have this be a separate distribution package? This concept is only > > reliable if all of the code that makes use of it shares a common > > implementation. It does no good to register a class as ProtoMagnitude, > > for instance, if an instance of that will passed to code in another library > > that is unaware of the ProtoMagnitude and Magnitude ABCs in the > > package, or maybe has its own independent system for attempting to > > accomplish the same goal. > > > > 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/7WC4SF... > > Code of Conduct: http://python.org/psf/codeofconduct/ > > -- > > --Guido (mobile) > >
Right. That's a much better term. `Orderable` and `ProtoOrderable`. _______________________________________________ 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/DIZPDIRF3254ZZZMCWSPEUOBLKC2MQZZ/ Code of Conduct: http://python.org/psf/codeofconduct/