Python でカスタム クラス オブジェクトが等しいかどうかを比較する方法

Susan Sarandon
リリース: 2024-11-03 08:10:29
オリジナル
348 人が閲覧しました

How to Compare Custom Class Objects for Equality in Python?

属性によるオブジェクトの同等性の比較

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート