Exercices Architecture & Patterns Objet avec historique des modifications
🎉

Bravo!

Avancé 🧠 Fondamentaux 30 XP 0 personnes ont réussi

Objet avec historique des modifications

Maintenant qu'on connait __sétattr__, on peut l'utiliser pour des choses plus interessantes que bloquer des modifications. Par exemple, garder un historique de toutes les modifications d'attributs.

Le principe : a chaque fois qu'un attribut est modifie, on enregistre l'ancienne et la nouvelle valeur dans un historique.

Écris une classe Tracable qui garde un historique de toutes les modifications d'attributs. L'historique est une liste de tuples (nom_attribut, ancienne_valeur, nouvelle_valeur). Pour la première assignation, l'ancienne valeur est None.

La classe doit avoir une méthode historique() qui renvoie cette liste.

Attention : l'attribut _historique lui-meme ne doit pas etre trace (sinon c'est la recursion infinie).

Exemple :
t = Tracable()
t.nom = 'Alice'
t.nom = 'Bob'
t.historique() renvoie [('nom', None, 'Alice'), ('nom', 'Alice', 'Bob')]

Tests (3/4)

Historique première assignation
t = Tracable()
t.nom = 'Alice'
assert t.historique() == [('nom', None, 'Alice')]
Historique modification
t = Tracable()
t.nom = 'Alice'
t.nom = 'Bob'
assert t.historique() == [('nom', None, 'Alice'), ('nom', 'Alice', 'Bob')]
Plusieurs attributs
t = Tracable()
t.x = 1
t.y = 2
assert len(t.historique()) == 2

+ 0 tests cachés

Indices (3 disponibles)

solution.py