Python 物件中的自訂相等性比較
Python 的預設行為將物件實例視為不同的實體,即使它們共用相同的屬性也是如此。當您想要根據物件的內部屬性而不是物件標識來比較物件時,此行為可能會出現問題。以下是如何自訂物件實例的相等性比較:
定義eq 方法
控制如何比較自訂類別的物件是否相等,在類別定義中定義eq 方法。此方法有兩個參數:self 和 other。 self 參數指的是目前對象,而 other 表示要與之比較的對象。
<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): # Don't compare to unrelated types return NotImplemented return self.foo == other.foo and self.bar == other.bar</code>
透過實作 __eq__,您實際上是在為類別的實例定義自訂相等性檢查。在此範例中,該方法比較 self 和 other 的 foo 和 bar 屬性,如果它們相等,則傳回 True。
實作 eq
實作eq 使類別的實例無法散列。這意味著它們不能用作字典中的鍵或集合中的元素。這是因為Python依靠hash()函數來確定物件是否可散列,而物件的雜湊值是從其內部內容派生的。由於物件的內容可能會因屬性分配而改變,因此無法可靠地對它們進行哈希處理。
如果您正在建模不可變類型,則還應該實現hash 方法以確保一致以及在集合中使用時的可預測行為。
避免通用解
嘗試透過迭代dict 並比較值來定義通用相等比較方法不建議。如果物件的字典中包含不可比較或不可散列的類型,則此方法可能無法正確比較物件。
以上是如何自訂 Python 物件的相等比較?的詳細內容。更多資訊請關注PHP中文網其他相關文章!