Dans Python3, les six opérateurs de comparaison riches
__lt__(self, other)
__le__(self, other)
__eq__(self, other)
__ne__(self, other)
__gt__(self, other)
__ge__(self, other)
doivent être fournis individuellement. Ceci peut être abrégé en utilisant functools.total_ordering
.
Cependant, cela s'avère assez illisible et peu pratique la plupart du temps. Vous devez toujours mettre des morceaux de code similaires dans deux fonctions - ou utiliser une autre fonction d'aide.
C'est pourquoi je préfère utiliser la classe mixin PY3__cmp__
illustré ci-dessous. Cela rétablit l'unique __cmp__
qui était et reste assez clair et pratique dans la plupart des cas. On peut toujours passer outre certaines comparaisons riches.
Votre exemple deviendrait simplement :
class point(PY3__cmp__):
...
# unchanged code
La classe de mixage PY3__cmp__ :
PY3 = sys.version_info[0] >= 3
if PY3:
def cmp(a, b):
return (a > b) - (a < b)
# mixin class for Python3 supporting __cmp__
class PY3__cmp__:
def __eq__(self, other):
return self.__cmp__(other) == 0
def __ne__(self, other):
return self.__cmp__(other) != 0
def __gt__(self, other):
return self.__cmp__(other) > 0
def __lt__(self, other):
return self.__cmp__(other) < 0
def __ge__(self, other):
return self.__cmp__(other) >= 0
def __le__(self, other):
return self.__cmp__(other) <= 0
else:
class PY3__cmp__:
pass