2012-10-15 44 views
13

在Python docsyeah, I have this thing with the docs)它說:Python - 用戶定義的類默認具有__cmp __()和__hash __()方法?要麼?

用戶定義的類具有__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__還是我缺少什麼?

回答

9

該文檔有點誤導。要獲得完整的故事,你必須在__cmp__閱讀起來,即這部分:

如果沒有__cmp__()__eq__()__ne__()操作定義,類實例由對象標識(「地址」)進行比較。

所以,基本上,你沒有得到默認情況下__cmp__方法,但用戶定義的類的實例可以與其他物體;如果實例沒有__cmp__方法,則將使用對象標識(由id(obj)決定,通常是對象的內存地址)。

相關問題