Python
prefers to use rich comparison functions(__eq__,__lt__,__neq__等),但如果这些不存在,那么它会回到使用一个比较函数(__cmp__,在Python 3中删除):
These are the so-called “rich comparison” methods, and are called for comparison operators in preference to __cmp__() below.
PyTypeObject PyInt_Type = {
...
(cmpfunc)int_compare, /* tp_compare */
...
0, /* tp_richcompare */
在Python 3中,integer type(现在很长)只实现了一个丰富的比较功能,因为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 "", line 1, in
AttributeError: 'int' object has no attribute '__eq__'
>>> (1).__cmp__(2)
-1