ホームページ >バックエンド開発 >Python チュートリアル >Python クラスでエレガントな等価比較を実現するにはどうすればよいですか?
オブジェクト指向プログラミングでは、多くの場合、カスタム クラスのオブジェクト間の等価性チェックを定義することが重要です。 Python では、等価比較と非等価比較のための特別なメソッド eq と __ne__ の実装を通じてこれを可能にします。
確立されたアプローチの 1 つは、dict 属性を比較することです。 2 つのオブジェクト:
class Foo: def __init__(self, item): self.item = item def __eq__(self, other): if isinstance(other, self.__class__): return self.__dict__ == other.__dict__ else: return False
ただし、次のより単純なものについて考えてみましょう。メソッド:
class Number: def __init__(self, number): self.number = number def __eq__(self, other): return isinstance(other, Number) and self.number == other.number
この簡潔なメソッドは、複雑な dict 比較の必要性を排除し、エレガントな代替手段となります。
さらに、サブクラス化をシームレスに処理し、可換性と互換性を保証します。一貫した等価性チェック:
class SubNumber(Number): pass n1 = Number(1) n2 = Number(1) n3 = SubNumber(1) n4 = SubNumber(4) print(n1 == n2) # True print(n2 == n1) # True print(n1 == n3) # True print(n1 != n4) # True print(len(set([n1, n2, n3]))) # 1
ソリューションを完了するには、これが不可欠です一貫性のあるハッシュと一意の識別のために hash メソッドをオーバーライドします:
class Number: def __init__(self, number): self.number = number def __eq__(self, other): return isinstance(other, Number) and self.number == other.number def __hash__(self): return hash(self.number)
これは、等価比較に dict を使用するときに発生するハッシュの問題に対処し、信頼性の高いセットの動作を保証し、異なるオブジェクトの一意の識別。
以上がPython クラスでエレガントな等価比較を実現するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。