在物件導向程式設計中,定義自訂類別的物件之間的相等檢查通常至關重要。 Python 透過實作特殊方法 eq 和 __ne__ 來實現這一點,分別用於等價和不等式比較。
一個既定方法是比較dict 屬性兩個物件:
class Foo: def __init__(self, item): self.item = item def __eq__(self, other): if isinstance(other, self.__class__): return self.__dict__ == other.__dict__ else: return False
但是,請考慮以下更簡單的方法:
class Number: def __init__(self, number): self.number = number def __eq__(self, other): return isinstance(other, Number) and self.number == other.number
這種簡潔的方法消除了複雜的dict 比較的需要,使其成為一種優雅的方法
此外,它無縫地處理子類化,確保可交換且一致的等式檢查:
class SubNumber(Number): pass n1 = Number(1) n2 = Number(1) n3 = SubNumber(1) n4 = SubNumber(4) print(n1 == n2) # True print(n2 == n1) # True print(n1 == n3) # True print(n1 != n4) # True print(len(set([n1, n2, n3]))) # 1
要完成解決方案,必須重寫hash 方法一致的雜湊和唯一標識:
class Number: def __init__(self, number): self.number = number def __eq__(self, other): return isinstance(other, Number) and self.number == other.number def __hash__(self): return hash(self.number)
這解決了使用dict 進行相等比較時遇到的雜湊問題,確保可靠的集合行為和不同物件的唯一識別。
以上是如何在Python類別中實現優雅的相等比較?的詳細內容。更多資訊請關注PHP中文網其他相關文章!