[Python-3000] ABC for Inequalities

Guido van Rossum guido at python.org
Tue Feb 12 04:08:58 CET 2008


Hold on. We went down that road quite a bit and then discovered it
wasn't going to work. The problem is that if you have two instance x,
y such that isinstance(x, TotalOrdering) and isinstance(y,
TotalOrdering) you still don't know if x < y is defined. (For example,
if x is a string and y is a number.) We ended up deciding that such an
ABC was not useful. There's a useful definition in there somewhere but
it's elusive. We'll eventually figure it out.

On Feb 11, 2008 5:45 PM, Raymond Hettinger <python at rcn.com> wrote:
> >> Was some thought given to providing a mixin for boolean
> >> inequalities in total orderings (define __le__ and get
> >> the rest for free)
>
> [GvR]
> > IOW it's messy.
>
> Would it make sense to do something in numbers.py modeled
> after Exact/InExact?  Those don't have any behavior; they
> just make a statement about semantics.
>
>
> Raymond
>
>
> ---------------------------
> class TotalOrdering(object):
>     '''Equality and inequality operations on this type are guaranteed to
>     return boolean values and to imply a total ordering where the relations
>     are transitive (a<b and b<c implies a<c) and the operators have the
>     usual interrelationships:  (a<b) == (b>a) == (not a>=b) == (not b<=a).
>     '''
>     @abstractmethod
>     def __eq__(self, other): pass
>
>     @abstractmethod
>     def __ne__(self, other): pass
>
>     @abstractmethod
>     def __lt__(self, other): pass
>
>     @abstractmethod
>     def __le__(self, other): pass
>
>     @abstractmethod
>     def __gt__(self, other): pass
>
>     @abstractmethod
>     def __ge__(self, other): pass
>



-- 
--Guido van Rossum (home page: http://www.python.org/~guido/)


More information about the Python-3000 mailing list