Python クラスの同等性の維持: 同等性メソッドの包括的なガイド
Python では、eq と ne の特別なメソッドは、カスタム クラスの等価性を定義する便利な方法を提供します。 __dict__s を比較する基本的なアプローチは実行可能なオプションですが、サブクラスや他の型との相互運用性に関する課題に直面する可能性があります。
より堅牢な等価性処理
これらに対処するには制限があるため、より包括的な実装を検討してください:
class Number: def __init__(self, number): self.number = number def __eq__(self, other): if isinstance(other, Number): return self.number == other.number return NotImplemented def __ne__(self, other): x = self.__eq__(other) if x is not NotImplemented: return not x return NotImplemented def __hash__(self): return hash(tuple(sorted(self.__dict__.items()))) class SubNumber(Number): pass
このバージョンには以下が含まれます:
検証とテスト
このアプローチの堅牢性を検証するために、以下に一連のアサーションを示します。
n1 = Number(1) n2 = Number(1) n3 = SubNumber(1) n4 = SubNumber(4) assert n1 == n2 assert n2 == n1 assert not n1 != n2 assert not n2 != n1 assert n1 == n3 assert n3 == n1 assert not n1 != n3 assert not n3 != n1 assert not n1 == n4 assert not n4 == n1 assert n1 != n4 assert n4 != n1 assert len(set([n1, n2, n3])) == 1 assert len(set([n1, n2, n3, n4])) == 2
これらのアサーションは、等価性メソッドの正しい動作とハッシュ値の一貫性を示しています。
このより包括的なアプローチを採用することで、堅牢な等価性処理を備えた Python クラスを作成し、信頼性の高い比較と正確なセットおよびディクショナリ操作を保証できます。
以上がPython クラスが本当に等しいことを確認するにはどうすればよいですか: 等価性メソッドのガイドの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。