介绍
在这个项目中,你将学习如何在 Python 中实现一个不可变字典。不可变字典是一种数据结构,一旦创建就不能被修改,这在某些需要数据保持不变的应用场景中非常有用。
👀 预览
d["Connection"]='kee-alive'
d["Host"]='www.labex.io'
TypeError("'ImmutableDict' 对象是不可变的")
TypeError("'ImmutableDict' 对象是不可变的")
d.get("Host")='www.labex.io'
🎯 任务
在这个项目中,你将学习:
- 如何创建一个继承自内置
dict类的ImmutableDict类 - 如何在
ImmutableDict类中实现方法以防止对字典进行修改 - 如何测试
ImmutableDict类以确保其行为符合预期
🏆 成果
完成这个项目后,你将能够:
- 理解不可变数据结构的概念及其用例
- 使用
ImmutableDict类在 Python 中实现一个不可变字典 - 通过重写适当的方法来防止对字典进行修改
- 测试
ImmutableDict类以确保其按预期工作
实现 ImmutableDict 类
在这一步中,你将学习如何在 immutable_dict.py 文件中实现 ImmutableDict 类。按照以下步骤完成此步骤:
- 打开位于
/home/labex/project目录下的immutable_dict.py文件。 - 创建一个名为
ImmutableDict的新类,它继承自内置的dict类。
class ImmutableDict(dict):
- 在
ImmutableDict类中实现以下方法,以使字典变为不可变:
def __setitem__(self, key, value):
raise TypeError("'ImmutableDict' 对象是不可变的")
def __delitem__(self, key):
raise TypeError("'ImmutableDict' 对象是不可变的")
def pop(self, key, default=None):
raise TypeError("'ImmutableDict' 对象是不可变的")
def popitem(self):
raise TypeError("'ImmutableDict' 对象是不可变的")
def clear(self):
raise TypeError("'ImmutableDict' 对象是不可变的")
def update(self, *args, **kwargs):
raise TypeError("'ImmutableDict' 对象是不可变的")
def setdefault(self, key, default=None):
raise TypeError("'ImmutableDict' 对象是不可变的")
这些方法重写了 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' 对象是不可变的")
TypeError("'ImmutableDict' 对象是不可变的")
d.get("Host")='www.labex.io'
此输出表明 ImmutableDict 类的行为符合预期,并且任何修改字典的尝试都会引发 TypeError 异常。
恭喜!你已成功实现并测试了 ImmutableDict 类。现在,你可以在你的 Python 应用程序中使用此类来存储不可变数据结构。
总结
恭喜!你已完成这个项目。你可以在 LabEx 中练习更多实验来提升你的技能。



