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__或者我错过了什么?

4

1 回答 1

9

该文档有点误导。要获得完整的故事,您必须阅读__cmp__,即这部分:

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

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

于 2012-10-15T20:44:27.487 回答