属性比較によるオブジェクトの同等性の強化
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 サイトの他の関連記事を参照してください。