如何在 Python 中定義自訂物件相等:您應該實作 `__eq__` 嗎?

Mary-Kate Olsen
發布: 2024-11-03 09:39:02
原創
835 人瀏覽過

How to Define Custom Object Equality in Python: Should You Implement `__eq__`?

透過屬性比較增強物件相等性

在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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板