【问题标题】:Python - User-defined classes have __cmp__() and __hash__() methods by default? Or?Python - 用户定义的类默认有 __cmp__() 和 __hash__() 方法?要么?
【发布时间】:2012-10-05 21:34:30
【问题描述】:

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

【问题讨论】:

    标签: python methods comparison default


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2012-07-04
      • 2016-11-20
      • 2015-02-11
      • 2018-09-13
      • 1970-01-01
      • 2011-03-28
      相关资源
      最近更新 更多