Hello Mart,
This has been discussed before. Guido was against automatically filling
in these methods based I think on the fact that this may not be what you
want - worth searching the archives for.
See here for a class decorator that provides all rich comparison methods
for classes that only implement one (e.g. __lt__):
http://code.activestate.com/recipes/576529/
Michael Foord
Mart Sõmermaa wrote:
__cmp__ used to provide a convenient way to make all ordering
operators work by defining a single method. For better or worse, it's
gone in 3.0.
To provide total ordering without __cmp__ one has to implement all of
__lt__, __gt__, __le__, __ge__, __eq__ and __ne__. However, in all but
a few cases it suffices only to provide a "real" implementation for
e.g. __lt__ and define all the other methods in terms of it as follows:
class TotalOrderMixin(object):
def __lt__(self, other):
raise NotImplemented # override this
def __gt__(self, other):
return other < self
def __le__(self, other):
return not (other < self)
def __ge__(self, other):
return not (self < other)
__eq__ and __ne__ are somewhat special, although it is possible to
define them in terms of __lt__
def __eq__(self, other):
return not (self == other)
def __ne__(self, other):
return self < other or other < self
it may be inefficient.
So, to avoid the situation where all the projects that match
http://www.google.com/codesearch?q=__cmp__+lang%3Apython have to
implement their own TotalOrderMixin, perhaps one could be provided in
the stdlib? Or even better, shouldn't a class grow automagic __gt__,
__le__, __ge__ if __lt__ is provided, and, in a similar vein, __ne__
if __eq__ is provided?
------------------------------------------------------------------------
_______________________________________________
Python-Dev mailing list
Python-Dev@python.org
http://mail.python.org/mailman/listinfo/python-dev
Unsubscribe:
http://mail.python.org/mailman/options/python-dev/fuzzyman%40voidspace.org.uk
--
http://www.ironpythoninaction.com/
_______________________________________________
Python-Dev mailing list
Python-Dev@python.org
http://mail.python.org/mailman/listinfo/python-dev
Unsubscribe:
http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com