在 Python 中,根據物件實例的屬性來比較物件實例的相等性可能是一項常見的程式設計任務。但是,Python 中預設的相等運算子 (==) 檢查物件標識而不是屬性值。
考慮以下範例:
<code class="python">class MyClass: def __init__(self, foo, bar): self.foo = foo self.bar = bar x = MyClass('foo', 'bar') y = MyClass('foo', 'bar') print(x == y) # Output: False</code>
雖然 x 和 y 具有相同的屬性值,相等性檢查傳回 False,因為它們是不同的物件實例。為了解決這個問題並考慮屬性值是否相等,我們需要實作 __eq__ 方法。
<code class="python">class MyClass: def __init__(self, foo, bar): self.foo = foo self.bar = bar def __eq__(self, other): if not isinstance(other, MyClass): return False # Don't compare with different types return self.foo == other.foo and self.bar == other.bar print(x == y) # Output: True</code>
透過重寫 __eq__ 方法,我們可以為我們的類別定義相等行為並檢查屬性值比較。這可以確保具有相同屬性值的物件根據需要被視為相等。
請注意,實作 __eq__ 將使您的物件不可散列,這意味著它們不能作為鍵參與集合和字典。如果不需要這種行為,請考慮實作 __hash__ 以使您的物件可哈希,前提是它們代表不可變資料。
以上是如何在 Python 中比較物件的屬性相等性?的詳細內容。更多資訊請關注PHP中文網其他相關文章!