首頁 >後端開發 >Python教學 >如何自訂 Python 物件的相等比較?

如何自訂 Python 物件的相等比較?

DDD
DDD原創
2024-11-03 09:16:29270瀏覽

How Can You Customize Equality Comparison for Python Objects?

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

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn