ホームページ  >  記事  >  バックエンド開発  >  Python でオブジェクト インスタンスの等価比較を定義するにはどうすればよいですか?

Python でオブジェクト インスタンスの等価比較を定義するにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-11-03 20:49:29791ブラウズ

How to Define Equality Comparison for Object Instances in Python?

属性に基づいてオブジェクト インスタンスの同等性を比較する方法

Python はネイティブに参照によってオブジェクト インスタンスを比較します。つまり、2 つのオブジェクトが同一である場合でも、属性値が異なる場合、それらは等しくないものとみなされます。この動作は、オブジェクト属性に基づいて等価性チェックを実行する必要がある場合に問題となる可能性があります。

この問題に対する 1 つの解決策は、クラスに __eq__ メソッドを実装することです。このメソッドを使用すると、クラスの 2 つのインスタンスが等しいとみなされる条件を定義できます。

__eq__ を実装するには、次の手順に従います。

  1. 次のシグネチャを持つ関数を定義します。 def __eq__(self, other).
  2. 他のオブジェクトが self と同じクラスであるかどうかを確認します。
  3. other が異なるクラスである場合は、NotImplemented を返します。
  4. self と other の属性値を比較して等しいかどうかを判断します。

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

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