Python prefers to use rich comparison functions (__eq__
, __lt__
, __neq__
, etc.), aber wenn diese nicht vorhanden ist, fällt es zurück eine einzige Vergleichsfunktion zu verwenden (__cmp__
, entfernt in Python 3):
These sind die sogenannten "Rich-Comparison" -Methoden und werden für Vergleichsoperatoren bevorzugt gegenüber __cmp__()
unten genannt.
Die Python 2 integer type keine reiche Vergleichsfunktion implementieren:
PyTypeObject PyInt_Type = {
...
(cmpfunc)int_compare, /* tp_compare */
...
0, /* tp_richcompare */
In Python 3, die integer type (heute ein lang) implementiert nur eine reiche Vergleichsfunktion, da Python 3 Unterstützung für __cmp__
fiel:
PyTypeObject PyLong_Type = {
...
long_richcompare, /* tp_richcompare */
Dies ist, warum (123).__eq__
nicht existiert. Stattdessen fällt Python 2-(123).__cmp__
zurück, wenn die Gleichheit zweier ganzer Zahlen testen:
>>> (1).__eq__(2)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'int' object has no attribute '__eq__'
>>> (1).__cmp__(2)
-1
http://stackoverflow.com/questions/3588776/how-is-eq-handled-in-python-and-in- what-order schauen Sie sich ein paar Antworten hier an, ich denke, sie erklären es gut – sjr59
Wild rate, aber 'vom Operator importieren eq; eq (2,2) 'funktioniert in Python2. Entweder das oder die Verwendung von '__cmp__' –
' a .__ cmp__' existiert, was Python 2 möglicherweise benutzt. – Blender