不変辞書の実装

PythonPythonBeginner
今すぐ練習

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

このプロジェクトでは、Python で不変辞書を実装する方法を学びます。不変辞書は、作成後に変更できないデータ構造であり、データが変更されないことが必要な特定のアプリケーションで役立ちます。

👀 プレビュー

d["Connection"]='kee-alive'
d["Host"]='www.labex.io'
TypeError("'ImmutableDict' objects are immutable")
TypeError("'ImmutableDict' objects are immutable")
d.get("Host")='www.labex.io'

🎯 タスク

このプロジェクトでは、以下を学びます。

  • 組み込みの dict クラスから継承する ImmutableDict クラスを作成する方法
  • ImmutableDict クラスにメソッドを実装して辞書の変更を防止する方法
  • ImmutableDict クラスをテストして期待通りの動作を確認する方法

🏆 成果

このプロジェクトを完了すると、以下ができるようになります。

  • 不変データ構造の概念とその使用例を理解する
  • ImmutableDict クラスを使用して Python で不変辞書を実装する
  • 適切なメソッドをオーバーライドして辞書の変更を防止する
  • ImmutableDict クラスをテストして期待通りに機能することを確認する

Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL python(("Python")) -.-> python/DataStructuresGroup(["Data Structures"]) python(("Python")) -.-> python/ObjectOrientedProgrammingGroup(["Object-Oriented Programming"]) python(("Python")) -.-> python/ErrorandExceptionHandlingGroup(["Error and Exception Handling"]) python/DataStructuresGroup -.-> python/dictionaries("Dictionaries") python/ObjectOrientedProgrammingGroup -.-> python/classes_objects("Classes and Objects") python/ObjectOrientedProgrammingGroup -.-> python/inheritance("Inheritance") python/ErrorandExceptionHandlingGroup -.-> python/catching_exceptions("Catching Exceptions") python/ErrorandExceptionHandlingGroup -.-> python/raising_exceptions("Raising Exceptions") subgraph Lab Skills python/dictionaries -.-> lab-302737{{"不変辞書の実装"}} python/classes_objects -.-> lab-302737{{"不変辞書の実装"}} python/inheritance -.-> lab-302737{{"不変辞書の実装"}} python/catching_exceptions -.-> lab-302737{{"不変辞書の実装"}} python/raising_exceptions -.-> lab-302737{{"不変辞書の実装"}} end

ImmutableDict クラスの実装

このステップでは、immutable_dict.py ファイルに ImmutableDict クラスを実装する方法を学びます。以下の手順に従ってこのステップを完了しましょう。

  1. /home/labex/project ディレクトリにある immutable_dict.py ファイルを開きます。
  2. 組み込みの dict クラスから継承する新しいクラス ImmutableDict を作成します。
class ImmutableDict(dict):
  1. ImmutableDict クラスに以下のメソッドを実装して、辞書を不変にします。
def __setitem__(self, key, value):
    raise TypeError("'ImmutableDict' objects are immutable")

def __delitem__(self, key):
    raise TypeError("'ImmutableDict' objects are immutable")

def pop(self, key, default=None):
    raise TypeError("'ImmutableDict' objects are immutable")

def popitem(self):
    raise TypeError("'ImmutableDict' objects are immutable")

def clear(self):
    raise TypeError("'ImmutableDict' objects are immutable")

def update(self, *args, **kwargs):
    raise TypeError("'ImmutableDict' objects are immutable")

def setdefault(self, key, default=None):
    raise TypeError("'ImmutableDict' objects are immutable")

これらのメソッドは dict クラスの対応するメソッドをオーバーライドし、辞書を変更しようとするときに TypeError 例外を発生させます。

  1. immutable_dict.py ファイルを保存します。

ImmutableDict クラスのテスト

このステップでは、ImmutableDict クラスが期待通りに動作することを確認するために、そのクラスをテストします。以下の手順に従ってこのステップを完了しましょう。

  1. /home/labex/project ディレクトリにある immutable_dict.py ファイルを開きます。
  2. ファイルの末尾に以下のコードを追加して、ImmutableDict クラスをテストします。
if __name__ == "__main__":
    d = ImmutableDict(Connection="kee-alive", Host="www.labex.io")
    print(f'{d["Connection"]=}')
    print(f'{d["Host"]=}')

    try:
        d["Host"] = "test.com"
    except TypeError as e:
        print(repr(e))

    try:
        d.pop("Host")
    except TypeError as e:
        print(repr(e))

    print(f'{d.get("Host")=}')
  1. immutable_dict.py ファイルを保存します。
  2. ターミナルで immutable_dict.py スクリプトを実行します。
python3 immutable_dict.py

出力は以下のようになるはずです。

d["Connection"]='kee-alive'
d["Host"]='www.labex.io'
TypeError("'ImmutableDict' objects are immutable")
TypeError("'ImmutableDict' objects are immutable")
d.get("Host")='www.labex.io'

この出力は、ImmutableDict クラスが期待通りに動作し、辞書を変更しようとすると TypeError 例外が発生することを示しています。

おめでとうございます!あなたは正常に ImmutableDict クラスを実装し、それをテストしました。これで、Python アプリケーションで不変データ構造を格納するためにこのクラスを使用できるようになりました。

✨ 解答を確認して練習

まとめ

おめでとうございます!このプロジェクトを完了しました。あなたは実験技術を向上させるために、LabExでさらに多くの実験を行うことができます。