2011-02-11 12 views

回答

26

Python的「Data model」解釋這一切:

有比較運營商之間沒有隱含的關係。 x==y的事實並不意味着x!=y是錯誤的。因此,在定義__eq__()時,還應該定義__ne__(),以便操作員按照預期行事。

C(1) != C(2)中,它使用默認實現,其中對象僅等於自己,與其他任何東西都不相等。

定義__cmp__可以更簡單,因爲它是用作所有比較操作不只是一些,他們的回退:

... def __cmp__(self, o): 
...  return 0 
>>> C(1) != C(2) 
False 
+0

是否有任何理由不會僅僅在``__eq__```上覆蓋``__cmp__``? – 2016-03-04 18:56:59

+0

`__cmp__`是一個較老的Python特性(`__eq__`優先),現在已經從Python 3中刪除,所以現在不應該在任何Python代碼中使用它:https://docs.python.org/3.0/whatsnew /3.0.html#ordering-comparisons – Cas 2017-06-11 12:29:02

2

您必須同時定義__ne____eq__。你也許應該考慮實施__cmp__呢!

8

沒有爲!=一個單獨的函數,它是__ne__它隱含定義比較實例成員。

你想要做的是:

def __ne__(self, other): 
    return not self.__eq__(other) 

或這方面的一些變種。

相關問題