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/7WC4SF2GYVLP56K6Q74OKFPJGHGWAPIP/
> Code of Conduct: http://python.org/psf/codeofconduct/
>
-- 
--Guido (mobile)
_______________________________________________
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/CGBEAH6AIVV2TKYTPLOYQ6PG7THB6O5M/
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to