2010年2月7日 星期日

覆寫 __eq__ 時記得要一併覆寫 __ne__

在 Python 裡, 使用 == 和 != 時, 會呼叫不同的函式:
a == b # call a.__eq__
a != b # call a.__ne__
所以, 有可能發生 a== b 為 True, a != b 也為 True 的奇怪情況。這和 Java 只要 (只能) 覆寫 equals() 不同。

若想避免這種情形, 可以選擇覆寫 __eq__, 另外在 __ne__ 裡呼叫 __eq__:
class A(object):
    def __eq__(self, other):
        # Write your code here

    def __ne__(self, other):
        return not self == other
      
若只覆寫 __eq__ 忘了覆寫 __ne__, 之後會很難除錯, 有時 client code 使用 "not a == b" 會得到和 "a != b" 不同的結果。

沒有留言:

張貼留言

在 Fedora 下裝 id-utils

Fedora 似乎因為執行檔撞名,而沒有提供 id-utils 的套件 ,但這是使用 gj 的必要套件,只好自己編。從官網抓好 tarball ,解開來編譯 (./configure && make)就是了。 但編譯後會遇到錯誤: ./stdio.h:10...