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

时间:2012-10-15 20:38:27

标签: python methods comparison default

在python docsyeah, I have this thing with the docs)中,它说:

  

默认情况下,用户定义的类具有__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 个答案:

答案 0 :(得分:9)

文档有点误导。要了解完整的故事,您必须阅读__cmp__,即此部分:

  

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

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