属性によるオブジェクトの同等性の比較
Python では、等価演算子 (==) を使用して 2 つのオブジェクトを比較しても、常に結果が得られるわけではありませんこれらのオブジェクトがカスタム クラスのインスタンスである場合に期待される結果。この問題に対処するには、eq メソッドを実装して、カスタム クラスのカスタム等価動作を定義できます。
foo 属性と bar 属性を持つ MyClass クラスを考えてみましょう。
<code class="python">class MyClass: def __init__(self, foo, bar): self.foo = foo self.bar = bar</code>
このクラスの 2 つのインスタンス 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 ユーザーは、eq の代わりに cmp を実装し、不平等動作のために ne の実装を検討する必要があるかもしれません。
以上がPython でカスタム クラス オブジェクトが等しいかどうかを比較する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。