Python - 用户定义的类默认具有__cmp __()和__hash __()方法?要么?

Ele*_*naT 13 python methods comparison default

在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__'
>>>
Run Code Online (Sandbox Code Playgroud)

那么__cmp__我错过了哪里或什么?

mip*_*adi 9

文档有点误导.要了解完整的故事,你必须阅读__cmp__,即这一部分:

如果否__cmp__(),__eq__()或者__ne__()定义了操作,则通过对象标识("地址")比较类实例.

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