Python では、特別なメソッド eq およびne は、== 演算子と != 演算子にそれぞれ対応します。これにより、そのようなクラスのオブジェクトがその属性に基づいて等しいかどうか比較できるようになります。
等価性を達成するためのシンプルかつ効果的な方法は、オブジェクトの属性を含む辞書を比較することです。 :
この方法は確立されていますが、同じクラスのオブジェクト間の等価性は高くなりますが、関連のない型のサブクラスやインスタンスを扱う場合には課題に直面します。これらの問題に対処するには、次の考慮事項が重要です。
クラシック スタイル クラスの非可換性:
クラシック スタイル Python 2 クラスは、eq を実行します。最初のオペランドの メソッドを呼び出し、2 番目のオペランドでは ne を呼び出します。対称性を確保するには、サポートされていないオペランドの型に対して NotImplemented を返すことを検討してください。
サポートされていない型に対して NotImplemented を返す:
オペランドの型が異なる場合 (いいえ)継承)、eq で NotImplemented を返し、 ne は、比較を他のオペランドの反映されたメソッドに委任します。これにより可換性が保証され、セットを使用して一意のインスタンスを決定できるようになります。
ハッシュとセットの処理:
デフォルトでは、オブジェクトはオブジェクト識別子を使用してハッシュされます。セット内で適切な比較を保証するには、hash をオーバーライドして、オブジェクトの属性に基づいて一貫したハッシュを計算します。
これらの考慮事項を組み込むと、より堅牢な実装が得られます。オブジェクト等価性の実装:
この実装により、正しいことが保証されます。サブクラスや無関係なインスタンス間でも等価性とハッシュ化を実現し、Python クラスで等価性をサポートするより洗練された包括的な手段を提供します。
以上がPython クラスで等価性を達成する方法: __eq__、__ne__、およびハッシュの詳細?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。