ホームページ  >  記事  >  バックエンド開発  >  Python でオブジェクトの属性が等しいかどうかを比較するにはどうすればよいですか?

Python でオブジェクトの属性が等しいかどうかを比較するにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-11-03 21:52:30228ブラウズ

How Can I Compare Objects for Attribute Equality in Python?

属性の同一性についてオブジェクトを比較

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。