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

DDD
リリース: 2024-11-03 09:16:29
オリジナル
214 人が閲覧しました

How Can You Customize Equality Comparison for Python Objects?

Python オブジェクトのカスタマイズされた等価比較

Python のデフォルトの動作では、オブジェクト インスタンスが同一の属性を共有している場合でも、オブジェクト インスタンスを別個のエンティティとして扱います。この動作は、オブジェクトの ID ではなく内部プロパティに基づいてオブジェクトを比較する場合に問題となる可能性があります。オブジェクト インスタンスの等価比較をカスタマイズする方法は次のとおりです。

eq メソッドの定義

カスタム クラスのオブジェクトの等価比較方法を制御するには、クラス定義内で eq メソッドを定義します。このメソッドは、self と other の 2 つの引数を取ります。 self パラメータは現在のオブジェクトを参照し、other は比較対象のオブジェクトを表します。

<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):
            # Don't compare to unrelated types
            return NotImplemented

        return self.foo == other.foo and self.bar == other.bar</code>
ログイン後にコピー

__eq__ を実装すると、基本的にクラスのインスタンスのカスタム等価性チェックを定義することになります。この例では、メソッドは self と other の foo 属性と bar 属性を比較し、両方が等しい場合に True を返します。

eq

eq を実装すると、クラスのインスタンスがハッシュ化不能になります。これは、辞書内のキーとして、またはセット内の要素として使用できないことを意味します。これは、Python が hash() 関数に依存してオブジェクトがハッシュ可能かどうかを判断し、オブジェクトのハッシュ値がその内部コンテンツから導出されるからです。オブジェクトの内容は属性の割り当てによって変更される可能性があるため、確実にハッシュすることはできません。

不変型をモデル化している場合は、一貫性を確保するために

hash メソッドも実装する必要があります。

一般的な解決策を避ける

dict を反復処理して値を比較することにより、一般的な等価比較メソッドを定義しようとしています。はお勧めしません。このアプローチでは、オブジェクトの辞書内に比較不可能またはハッシュ不可能な型が含まれている場合、オブジェクトを正しく比較できない可能性があります。

以上がPython オブジェクトの等価比較をカスタマイズするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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