覆寫 __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" 不同的結果。

留言

這個網誌中的熱門文章

(C/C++ ) 如何在 Linux 上使用自行編譯的第三方函式庫

熟悉系統工具好處多多

virtualbox 使用 USB 裝置