Python - 默认情况下,用户定义的类有 __cmp__() 和 __hash__() 方法吗?还是说呢?

13
在Python的文档中(是的,我对文档有这个问题),它说:

默认情况下,用户定义的类具有__cmp__()__hash__()方法;使用它们,所有对象都不相等(除了自身),并且x.__hash__()返回id(x)

但以下代码显示了另一件事:

>>> class Test(object): pass
...
>>> t = Test()
>>>
>>> t.__hash__
<method-wrapper '__hash__' of Test object at 0x01F2B5D0>
>>>
>>> t.__cmp__
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'Test' object has no attribute '__cmp__'
>>>

所以,__cmp__在哪里呢?或者我错过了什么?
1个回答

9
文档有点误导人。要了解全部内容,您需要阅读__cmp__,特别是其中的这一部分:

如果未定义__cmp__()__eq__()__ne__()操作,则通过对象标识(“地址”)比较类实例。

所以,基本上,默认情况下不会得到__cmp__方法,但用户定义类的实例可以与其他对象进行比较;如果实例没有__cmp__方法,则将使用对象标识(由id(obj)确定,通常是对象的内存地址)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接