Python でカスタム オブジェクトの等価性を定義する方法: `__eq__` を実装する必要がありますか?

Mary-Kate Olsen
リリース: 2024-11-03 09:39:02
オリジナル
835 人が閲覧しました

How to Define Custom Object Equality in Python: Should You Implement `__eq__`?

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

Python では、通常、2 つのオブジェクトが等しいかどうかを比較します (== 演算子を使用)。オブジェクト参照の。ただし、同じクラスのオブジェクトが同一の属性を持ち、異なるオブジェクト参照を持つ場合、これは望ましくない可能性があります。

オブジェクトの等価性のカスタマイズ

オブジェクトの等価性の動作を変更するには、次のようにします。クラス定義内に eq メソッドを実装できます。カスタム eq メソッドを定義することで、そのクラスのインスタンス間の平等性を判断するための正確な基準を指定します。

MyClass の実装

この例では、メンバー変数 foo と bar を持つ MyClass クラスがあります。 eq メソッドは次のように実装できます。

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
ログイン後にコピー

この実装では、両方のオブジェクトが MyClass のインスタンスであることを確認し、それらの foo 値と bar 値を比較します。これらの属性が一致する場合、オブジェクトは等しいとみなされ、eq メソッドは True を返します。

影響と考慮事項

eq の実装 はクラスのインスタンスをハッシュ不可にします。つまり、クラスのインスタンスをセットや辞書に保存できません。クラスが可変型を表す場合は、インスタンスをハッシュ不可のままにすることを検討することをお勧めします。

不変のデータ モデルの場合、インスタンスが正しく動作できるようにするために、hash メソッドも実装することをお勧めします。

結論

eq メソッドをカスタマイズすることで、特定のクラスのオブジェクトが等しいかどうかを比較する方法を制御できるようになります。 。これにより、オブジェクトの関連属性に基づいて等価性を定義できるようになり、オブジェクト参照に関係なく、属性が一致する場合にそれらが等しいとみなされることが保証されます。

以上がPython でカスタム オブジェクトの等価性を定義する方法: `__eq__` を実装する必要がありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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