Implémentation d'un dictionnaire immuable

PythonPythonBeginner
Pratiquer maintenant

💡 Ce tutoriel est traduit par l'IA à partir de la version anglaise. Pour voir la version originale, vous pouvez cliquer ici

Introduction

Dans ce projet, vous allez apprendre à implémenter un dictionnaire immuable en Python. Un dictionnaire immuable est une structure de données qui ne peut pas être modifiée après sa création, ce qui est utile dans certaines applications où les données doivent rester inchangées.

👀 Aperçu

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'

🎯 Tâches

Dans ce projet, vous allez apprendre :

  • Comment créer une classe ImmutableDict qui hérite de la classe dict intégrée
  • Comment implémenter des méthodes dans la classe ImmutableDict pour empêcher la modification du dictionnaire
  • Comment tester la classe ImmutableDict pour vous assurer qu'elle se comporte comme prévu

🏆 Réalisations

Après avoir terminé ce projet, vous serez capable de :

  • Comprendre le concept de structures de données immuables et leurs cas d'utilisation
  • Implémenter un dictionnaire immuable en Python à l'aide de la classe ImmutableDict
  • Empêcher la modification du dictionnaire en redéfinissant les méthodes appropriées
  • Tester la classe ImmutableDict pour vous assurer qu'elle fonctionne comme prévu

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{{"Implémentation d'un dictionnaire immuable"}} python/classes_objects -.-> lab-302737{{"Implémentation d'un dictionnaire immuable"}} python/inheritance -.-> lab-302737{{"Implémentation d'un dictionnaire immuable"}} python/catching_exceptions -.-> lab-302737{{"Implémentation d'un dictionnaire immuable"}} python/raising_exceptions -.-> lab-302737{{"Implémentation d'un dictionnaire immuable"}} end

Implémentation de la classe ImmutableDict

Dans cette étape, vous allez apprendre à implémenter la classe ImmutableDict dans le fichier immutable_dict.py. Suivez les étapes ci-dessous pour terminer cette étape :

  1. Ouvrez le fichier immutable_dict.py situé dans le répertoire /home/labex/project.
  2. Créez une nouvelle classe appelée ImmutableDict qui hérite de la classe dict intégrée.
class ImmutableDict(dict):
  1. Implémentez les méthodes suivantes dans la classe ImmutableDict pour rendre le dictionnaire immuable :
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")

Ces méthodes redéfinissent les méthodes correspondantes de la classe dict et lèvent une exception TypeError chaque fois qu'une tentative est faite de modifier le dictionnaire.

  1. Enregistrez le fichier immutable_dict.py.

Test de la classe ImmutableDict

Dans cette étape, vous allez tester la classe ImmutableDict pour vous assurer qu'elle se comporte comme prévu. Suivez les étapes ci-dessous pour terminer cette étape :

  1. Ouvrez le fichier immutable_dict.py dans le répertoire /home/labex/project.
  2. Ajoutez le code suivant à la fin du fichier pour tester la classe 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. Enregistrez le fichier immutable_dict.py.
  2. Exécutez le script immutable_dict.py dans le terminal :
python3 immutable_dict.py

La sortie devrait être :

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'

Cette sortie démontre que la classe ImmutableDict se comporte comme prévu, et que toute tentative de modification du dictionnaire entraînera une exception TypeError.

Félicitations! Vous avez réussi à implémenter la classe ImmutableDict et à la tester. Vous pouvez désormais utiliser cette classe dans vos applications Python pour stocker des structures de données immuables.

✨ Vérifier la solution et pratiquer

Sommaire

Félicitations! Vous avez terminé ce projet. Vous pouvez pratiquer plus de laboratoires sur LabEx pour améliorer vos compétences.