[Python-ideas] Automatic total ordering
tjreedy at udel.edu
Wed Oct 15 20:54:27 CEST 2008
Dillon Collins wrote:
> On Wednesday 15 October 2008, Terry Reedy wrote:
>> Since rich comparisons are defined on object and are inherited by all
>> classes, it would be difficult to make them not defined.
> Well, I believe that the suggestion comes down to having object's rich
> comparison operators try to use those of it's subclass rather than just
> throwing an error.
> Something like:
> class object():
> def __lt__(self, o): raise Error
> def __eq__(self, o): raise Error
> def __ne__(self, o):
> return not self.__eq__(self, o)
> def __le__(self, o):
> return self.__lt__(self, o) or self.__eq__(self, o)
> def __gt__(self, o):
> return not (self.__lt__(self, o) or self.__eq__(self, o))
> def __ge__(self, o):
> return not self.__lt__(self, o) and self.__eq__(self, o)
> Of course, if it were to actually be implemented, it would make more sense if
> it could use any two non complement ops (rather than lt and eq), but that
> would also make some trouble, I think.
> BTW, rather than the class decorator, you could just inherit (multiply?) the
> above class for total ordering as well.
I do not understand this response. In 3.0, the actual definitions are
the C equivalent of
def __eq__(self,other): return id(self) == id(other)
def __ne__(self,other): return id(self) != id(other)
def __lt__(self,other): return NotImplemented
More information about the Python-ideas