Implementar un Diccionario Inmutable

PythonPythonBeginner
Practicar Ahora

💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí

Introducción

En este proyecto, aprenderás cómo implementar un diccionario inmutable en Python. Un diccionario inmutable es una estructura de datos que no se puede modificar una vez creada, lo cual es útil en ciertas aplicaciones donde los datos deben permanecer inalterados.

👀 Vista previa

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'

🎯 Tareas

En este proyecto, aprenderás:

  • Cómo crear una clase ImmutableDict que herede de la clase dict incorporada
  • Cómo implementar métodos en la clase ImmutableDict para evitar modificaciones al diccionario
  • Cómo probar la clase ImmutableDict para asegurarse de que se comporta como se espera

🏆 Logros

Después de completar este proyecto, podrás:

  • Comprender el concepto de estructuras de datos inmutables y sus casos de uso
  • Implementar un diccionario inmutable en Python utilizando la clase ImmutableDict
  • Evitar modificaciones al diccionario sobrescribiendo los métodos adecuados
  • Probar la clase ImmutableDict para asegurarse de que funciona como se espera

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{{"Implementar un Diccionario Inmutable"}} python/classes_objects -.-> lab-302737{{"Implementar un Diccionario Inmutable"}} python/inheritance -.-> lab-302737{{"Implementar un Diccionario Inmutable"}} python/catching_exceptions -.-> lab-302737{{"Implementar un Diccionario Inmutable"}} python/raising_exceptions -.-> lab-302737{{"Implementar un Diccionario Inmutable"}} end

Implementando la clase ImmutableDict

En este paso, aprenderás cómo implementar la clase ImmutableDict en el archivo immutable_dict.py. Siga los pasos siguientes para completar este paso:

  1. Abra el archivo immutable_dict.py ubicado en el directorio /home/labex/project.
  2. Cree una nueva clase llamada ImmutableDict que herede de la clase dict incorporada.
class ImmutableDict(dict):
  1. Implemente los siguientes métodos en la clase ImmutableDict para hacer que el diccionario sea inmutable:
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")

Estos métodos sobrescriben los métodos correspondientes en la clase dict y generan una excepción TypeError cada vez que se intenta modificar el diccionario.

  1. Guarde el archivo immutable_dict.py.

Probando la clase ImmutableDict

En este paso, probarás la clase ImmutableDict para asegurarte de que se comporte como se espera. Sigue los pasos siguientes para completar este paso:

  1. Abre el archivo immutable_dict.py en el directorio /home/labex/project.
  2. Agrega el siguiente código al final del archivo para probar la clase 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. Guarda el archivo immutable_dict.py.
  2. Ejecuta el script immutable_dict.py en la terminal:
python3 immutable_dict.py

La salida debe ser:

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'

Esta salida demuestra que la clase ImmutableDict se comporta como se espera, y cualquier intento de modificar el diccionario generará una excepción TypeError.

¡Felicitaciones! Has implementado con éxito la clase ImmutableDict y la has probado. Ahora puedes usar esta clase en tus aplicaciones de Python para almacenar estructuras de datos inmutables.

✨ Revisar Solución y Practicar

Resumen

¡Felicitaciones! Has completado este proyecto. Puedes practicar más laboratorios en LabEx para mejorar tus habilidades.