蟒蛇喜欢用丰富的比较功能(__eq__
,__lt__
,__ne__
等),但如果这些都不存在,这回退到使用比较单一功能(__cmp__
在Python 3中删除):
这些是所谓的“丰富比较”方法,在__cmp__()
下面优先于比较运算符。
在Python 2的整数类型不实现丰富的比较功能:
PyTypeObject PyInt_Type = {
...
(cmpfunc)int_compare, /* tp_compare */
...
0, /* tp_richcompare */
在Python 3中,整数类型(现在很长)仅实现了丰富的比较功能,因为Python 3放弃了对以下内容的支持__cmp__
:
PyTypeObject PyLong_Type = {
...
long_richcompare, /* tp_richcompare */
这就是为什么(123).__eq__
不存在的原因。相反,Python 2(123).__cmp__
在测试两个整数的相等性时会退后一步:
>>> (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