Python では、属性に基づいてオブジェクト インスタンスの同一性を比較するのが一般的なプログラミング タスクとなる場合があります。ただし、Python のデフォルトの等価演算子 (==) は、属性値ではなくオブジェクトの同一性をチェックします。
次の例を考えてみましょう:
<code class="python">class MyClass: def __init__(self, foo, bar): self.foo = foo self.bar = bar x = MyClass('foo', 'bar') y = MyClass('foo', 'bar') print(x == y) # Output: False</code>
x と y は同じ属性値を持っていますがの場合、これらは異なるオブジェクト インスタンスであるため、等価性チェックは False を返します。この問題に対処し、等価性の属性値を検討するには、__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 False # Don't compare with different types return self.foo == other.foo and self.bar == other.bar print(x == y) # Output: True</code>
__eq__ メソッドをオーバーライドすることで、クラスの等価性動作を定義し、属性値をチェックできます。比較。これにより、同じ属性値を持つオブジェクトが必要に応じて等しいとみなされるようになります。
__eq__ を実装すると、オブジェクトがハッシュ化不能になることに注意してください。つまり、オブジェクトはセットやディクショナリにキーとして参加できなくなります。この動作が望ましくない場合は、オブジェクトが不変データを表す場合、__hash__ を実装してオブジェクトをハッシュ可能にすることも検討してください。
以上がPython でオブジェクトの属性が等しいかどうかを比較するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。