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" 不同的結果。
沒有留言:
張貼留言