2014-10-30 53 views
1

我在這裏做錯了什麼?我希望事例總是平等的,永遠不會是不平等的。但事實證明,事例是平等的和不平等的。類實例相等和不相等

$ cat test.py 
class MyClass(object): 

    def __eq__(self, other): 
     return True 


if __name__ == '__main__': 
    a = MyClass() 
    b = MyClass() 

    if a == b: 
     print "Equal" 
    if a != b: 
     print "Unequal" 


$ python --version 
Python 2.7.6 

$ python test.py 
Equal 
Unequal 

回答

3

的問題是,!=不會叫__eq__並倒轉。如果你想支持!=,那麼你也需要實現__ne__

a和b是不同的對象,所以是默認對象。 __ne__方法被調用,並報告爲True。

+0

謝謝,真的讓我難住了。 因爲,我不知道,獎金信息...?這似乎已在Python 3中發生了變化。'!='**將會顛倒'__eq__',這意味着我上面的測試文件將正確運行。 – 2014-10-30 17:58:20

+0

是的,這已經在Python 3中發生了變化。 – 2014-10-30 18:13:17