[Python-Dev] Deprecated __cmp__ and total ordering
Michael Foord
fuzzyman at voidspace.org.uk
Tue Mar 10 14:19:43 CET 2009
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 at 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/
More information about the Python-Dev
mailing list