Реализация неизменяемого словаря

PythonBeginner
Практиковаться сейчас

Введение

В этом проекте вы научитесь реализовывать неизменяемый словарь в 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. Следуйте шагам ниже, чтобы завершить этот шаг:

  1. Откройте файл immutable_dict.py, расположенный в директории /home/labex/project.
  2. Создайте новый класс под названием ImmutableDict, который наследуется от встроенного класса dict.
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. Откройте файл immutable_dict.py в директории /home/labex/project.
  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, чтобы улучшить свои навыки.

✨ Проверить решение и практиковаться✨ Проверить решение и практиковаться