2011-12-15 115 views

回答

6

在python中,爲了檢查一個對象是否等於或不等於另一個對象,調用特殊函數。 __eq__被稱爲檢查==,而__ne__被稱爲檢查!=

一般來說,對象可能不是__eq__定義__ne__不同。

E.g.

class Junk(object): 
    def __ne__(self, other): 
     return False 

    def __eq__(self, other): 
     return False 

j = Junk() 
print not j == 1 
print j != 1 

這產生了:

True 
False 

然而,這將是非常邪惡的......通常你應該永遠不必擔心這個問題。

+0

奇怪!什麼是一個人會真正想要「a .__ ne __(b)!=不是.__ eq __(b)`? – wim 2011-12-15 02:49:50

1

not a == b被翻譯爲致電not a.__eq__(b),而a != b被翻譯爲致電a.__ne__(b)。大多數情況下(幾乎所有我能想到的正常對象),__ne__被定義爲def __ne__(self, other): not self.__eq__(other),所以沒有功能差異。但是,您可以輕鬆創建一個與其他值相同並且不等於其他值的精神病對象,只需以正確的方式覆蓋__ne__(儘管我無法想象現在這種情況會有意義的情況)。

另一方面,內建對象可能以比not a == b稍快的方式實施a != b,但可能不會有任何明顯的量。