はじめに
このプロジェクトでは、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クラスをテストして期待通りに機能することを確認する
ImmutableDict クラスの実装
このステップでは、immutable_dict.py ファイルに ImmutableDict クラスを実装する方法を学びます。以下の手順に従ってこのステップを完了しましょう。
/home/labex/projectディレクトリにあるimmutable_dict.pyファイルを開きます。- 組み込みの
dictクラスから継承する新しいクラスImmutableDictを作成します。
class ImmutableDict(dict):
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 例外を発生させます。
immutable_dict.pyファイルを保存します。
ImmutableDict クラスのテスト
このステップでは、ImmutableDict クラスが期待通りに動作することを確認するために、そのクラスをテストします。以下の手順に従ってこのステップを完了しましょう。
/home/labex/projectディレクトリにあるimmutable_dict.pyファイルを開きます。- ファイルの末尾に以下のコードを追加して、
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")=}')
immutable_dict.pyファイルを保存します。- ターミナルで
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 でさらに多くの実験を行うことができます。



