ホームページ バックエンド開発 Python チュートリアル Python クラスが本当に等しいことを確認するにはどうすればよいですか: 等価性メソッドのガイド

Python クラスが本当に等しいことを確認するにはどうすればよいですか: 等価性メソッドのガイド

Nov 08, 2024 am 10:51 AM

How Can I Ensure My Python Classes Are Truly Equal: A Guide to Equivalence Methods

Python クラスの同等性の維持: 同等性メソッドの包括的なガイド

Python では、eqne の特別なメソッドは、カスタム クラスの等価性を定義する便利な方法を提供します。 __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
ログイン後にコピー

このバージョンには以下が含まれます:

  • サブクラス処理: Number クラス間で等価性が適切にチェックされることを保証します。
  • 非可換修正: オペランドの順序に関係なく、等価比較が可換であることが保証されます。
  • ハッシュ オーバーライド:カスタム ハッシュ メソッドを定義することで、同じ値を持つオブジェクトが同じハッシュ値を持つことが保証されます。これは、セットおよびディクショナリ操作にとって重要です。

検証とテスト

このアプローチの堅牢性を検証するために、以下に一連のアサーションを示します。

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 サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットな記事タグ

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

HTMLを解析するために美しいスープを使用するにはどうすればよいですか? HTMLを解析するために美しいスープを使用するにはどうすればよいですか? Mar 10, 2025 pm 06:54 PM

HTMLを解析するために美しいスープを使用するにはどうすればよいですか?

Pythonでの画像フィルタリング Pythonでの画像フィルタリング Mar 03, 2025 am 09:44 AM

Pythonでの画像フィルタリング

Pythonでファイルをダウンロードする方法 Pythonでファイルをダウンロードする方法 Mar 01, 2025 am 10:03 AM

Pythonでファイルをダウンロードする方法

Pythonを使用してテキストファイルのZIPF配布を見つける方法 Pythonを使用してテキストファイルのZIPF配布を見つける方法 Mar 05, 2025 am 09:58 AM

Pythonを使用してテキストファイルのZIPF配布を見つける方法

Pythonを使用してPDFドキュメントの操作方法 Pythonを使用してPDFドキュメントの操作方法 Mar 02, 2025 am 09:54 AM

Pythonを使用してPDFドキュメントの操作方法

DjangoアプリケーションでRedisを使用してキャッシュする方法 DjangoアプリケーションでRedisを使用してキャッシュする方法 Mar 02, 2025 am 10:10 AM

DjangoアプリケーションでRedisを使用してキャッシュする方法

TensorflowまたはPytorchで深い学習を実行する方法は? TensorflowまたはPytorchで深い学習を実行する方法は? Mar 10, 2025 pm 06:52 PM

TensorflowまたはPytorchで深い学習を実行する方法は?

Natural Language Toolkit(NLTK)の紹介 Natural Language Toolkit(NLTK)の紹介 Mar 01, 2025 am 10:05 AM

Natural Language Toolkit(NLTK)の紹介

See all articles