在python docs(yeah, 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__
或我错过了什么?
答案 0 :(得分:9)
文档有点误导。要了解完整的故事,您必须阅读__cmp__
,即此部分:
如果未定义
__cmp__()
,__eq__()
或__ne__()
操作,则按对象标识(“地址”)比较类实例。
因此,基本上,默认情况下,您没有获得__cmp__
方法,但可以将用户定义类的实例与其他对象进行比较;如果实例没有__cmp__
方法,则将使用对象标识(由id(obj)
确定,通常是对象的内存地址)。