属性に基づいてオブジェクト インスタンスの同等性を比較する方法
Python はネイティブに参照によってオブジェクト インスタンスを比較します。つまり、2 つのオブジェクトが同一である場合でも、属性値が異なる場合、それらは等しくないものとみなされます。この動作は、オブジェクト属性に基づいて等価性チェックを実行する必要がある場合に問題となる可能性があります。
この問題に対する 1 つの解決策は、クラスに __eq__ メソッドを実装することです。このメソッドを使用すると、クラスの 2 つのインスタンスが等しいとみなされる条件を定義できます。
__eq__ を実装するには、次の手順に従います。
たとえば、MyClass クラスの __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>
この実装では、MyClass のインスタンスが
<code class="python">x = MyClass('foo', 'bar') y = MyClass('foo', 'bar') print(x == y) # True</code>
__eq__ を実装すると、クラスのインスタンスがハッシュ不可能になることに注意してください。インスタンスをセットまたはディクショナリに保存する必要がある場合は、オブジェクトのハッシュ関数を定義する __hash__ メソッドも実装する必要があります。
以上がPython でオブジェクト インスタンスの等価比較を定義するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。