透過屬性比較物件是否相等
在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中文網其他相關文章!