如何在 Python 中比較自訂類別物件是否相等?

Susan Sarandon
發布: 2024-11-03 08:10:29
原創
347 人瀏覽過

How to Compare Custom Class Objects for Equality in Python?

透過屬性比較物件是否相等

在Python 中,使用相等運算子(==) 比較兩個物件並不總是產生結果當這些物件是自訂類別的實例時的預期結果。為了解決這個問題,我們可以實作 eq 方法來為自訂類別定義自訂相等行為。

考慮具有foo 和bar 屬性的MyClass 類別:

<code class="python">class MyClass:
    def __init__(self, foo, bar):
        self.foo = foo
        self.bar = bar</code>
登入後複製

此類的兩個實例x 和y 具有相同的屬性值:

<code class="python">x = MyClass('foo', 'bar')
y = MyClass('foo', 'bar')</code>
登入後複製

但是,使用相等運算子比較它們會導致False:

<code class="python">x == y</code>
登入後複製
登入後複製

要製作Python考慮這些實例相等,我們實作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 NotImplemented
        return self.foo == other.foo and self.bar == other.bar</code>
登入後複製

現在,比較x 和y 回傳True:

<code class="python">x == y</code>
登入後複製
登入後複製

注意實作 eq 自動使我們的類別的實例不可散列,從而防止它們儲存在集合和字典中。如果我們的類別建模不可變類型,我們也應該實現hash 方法:

<code class="python">class MyClass:
    def __hash__(self):
        return hash((self.foo, self.bar))</code>
登入後複製

循環通過dict 來比較值是不鼓勵的,因為它不是真正通用的並且可能會遇到不可比較或不可散列的類型。 Python 2 使用者可能需要實作 cmp 而不是 eq 並考慮實現 ne 來實現不平等行為。

以上是如何在 Python 中比較自訂類別物件是否相等?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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