Введение
В этом проекте вы научитесь реализовывать неизменяемый словарь в 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'
🎯 Задачи
В этом проекте вы научитесь:
- Как создать класс
ImmutableDict, наследующийся от встроенного классаdict - Как реализовать методы в классе
ImmutableDict, чтобы предотвратить модификацию словаря - Как протестировать класс
ImmutableDict, чтобы убедиться, что он работает как ожидается
🏆 Достижения
После завершения этого проекта вы сможете:
- Разобраться в концепции неизменяемых структур данных и их случаях использования
- Реализовать неизменяемый словарь в Python с использованием класса
ImmutableDict - Предотвратить модификацию словаря, переопределив соответствующие методы
- Протестировать класс
ImmutableDict, чтобы убедиться, что он работает как ожидается
Реализация класса ImmutableDict
В этом шаге вы научитесь реализовывать класс ImmutableDict в файле immutable_dict.py. Следуйте шагам ниже, чтобы завершить этот шаг:
- Откройте файл
immutable_dict.py, расположенный в директории/home/labex/project. - Создайте новый класс под названием
ImmutableDict, который наследуется от встроенного классаdict.
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, чтобы убедиться, что он работает как ожидается. Следуйте шагам ниже, чтобы завершить этот шаг:
- Откройте файл
immutable_dict.pyв директории/home/labex/project. - Добавьте следующий код в конец файла, чтобы протестировать класс
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, чтобы улучшить свои навыки.



