透過屬性比較增強物件相等性
在Python 中,比較兩個物件是否相等(使用== 運算子)通常預設為比較他們的物件引用。但是,當同一類別的物件具有相同的屬性但不同的物件引用時,這可能並不理想。
自訂物件相等
要修改物件相等的行為,我們可以在類別定義中實作 eq 方法。透過定義自訂 eq 方法,我們指定確定該類別實例之間相等性的確切標準。
MyClass 的實作
在提供的範例中,我們有帶有成員變數 foo 和 bar 的 MyClass 類別。我們可以實現 eq 方法,如下所示:
class MyClass: def __init__(self, foo, bar): self.foo = foo self.bar = bar def __eq__(self, other): if not isinstance(other, MyClass): return NotImplemented return self.foo == other.foo and self.bar == other.bar
透過此實現,我們檢查兩個物件是否都是 MyClass 的實例,然後比較它們的 foo 和 bar 值。如果這些屬性匹配,則物件被視為相等,並且 eq 方法傳回 True。
意義和注意事項
實作 eq 使類別的實例不可散列,這表示它們不能儲存在集合或字典中。如果您的類別表示可變類型,您可能需要考慮讓實例保持不可散列。
對於不可變資料模型,建議也實作 hash 方法以使實例能夠正確運行在字典和集合中。
結論
透過自訂透過 eq 方法,我們可以控制如何比較特定類別的物件是否相等。這允許我們根據物件的相關屬性定義相等性,確保當它們的屬性匹配時,它們被認為是相等的,無論它們的物件引用如何。
以上是如何在 Python 中定義自訂物件相等:您應該實作 `__eq__` 嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!