Le data model a été mis à jour entre python-2.x et python-3.x. En python-2.x on pourrait utiliser le __cmp__
method:
object.__cmp__(self, other)
Appelée par des opérations de comparaison si comparaison riche (voir ci-dessus) est non définie. Doit renvoyer un entier négatif si self < other
, zéro si self == other
, un entier positif si self > other
. Si aucune opération, __eq__()
ou __ne__()
n'est définie, les instances de classe sont comparées par l'identité d'objet ("adresse"). Voir aussi la description de __hash__()
pour quelques notes importantes sur créant des objets qui supportent les opérations de comparaison personnalisées et sont utilisables comme clés de dictionnaire. (Note: la restriction que exceptions ne sont pas propagées par __cmp__()
a été supprimé depuis Python 1.5.)
(formatage ajouté)
La comparaison riche opérateurs sont les __le__
, __ge__
, etc.. Donc dans python-2.x il y avait un mécanisme de repli supplémentaire . Il est défini pour un int
, comme vous pouvez le voir avec:
>>> (2).__cmp__
<method-wrapper '__cmp__' of int object at 0x13ee140>
>>> (2).__cmp__(3)
-1
(Python 2.7.12)
De plus python-2.xoffre une cmp(..)
builtin function:
cmp(x, y)
Comparer les deux objets x
et y
et renvoyer un entier selon le résultat.La valeur de retour est négative si x < y
, zéro si x == y
et strictement positive si x > y
.
(formatage ajouté)
En python-3.x, la __cmp__
a été supprimé comme vous pouvez le lire dans le What’s New In Python 3.0:
La fonction cmp()
doit être traitée comme disparu, et la __cmp__()
La méthode spéciale n'est plus supportée. Utilisez __lt__()
pour le tri, __eq__()
avec __hash__()
, et d'autres riches comparaisons en fonction des besoins. (Si vous avez vraiment besoin de la fonctionnalité cmp()
, vous pouvez utiliser l'expression (a > b) - (a < b)
comme l'équivalent pour cmp(a, b)
.)
(formatage ajouté)
Ce mécanisme est non seulement une enveloppe autour __cmp__
: il va d'abord regarder s'il y a riches comparaisons et si pas de repli sur __cmp__
lui-même.
En Python-2.7, le '__cmp__' est utilisé. –
https://docs.python.org/2.7/reference/datamodel.html#object.__cmp__ –
vaut la peine de mentionner est que dans python3 '__cmp__' a été enlevé donc pour comp complet Vous devez définir comp. méthodes magiques. –