Exercices Architecture & Patterns Intercepter les attributs manquants avec __gétattr__
🎉

Bravo!

Intermédiaire 🧠 Fondamentaux 20 XP 0 personnes ont réussi

Intercepter les attributs manquants avec __gétattr__

Quand tu accedes a un attribut d'un objet (par exemple obj.nom), Python suit un processus precis. Il cherche d'abord dans l'instance, puis dans la classe, puis dans les classes parentes. Si l'attribut n'est trouve nulle part, Python appelle la méthode speciale __gétattr__ si elle existe, sinon il leve une AttributeError.

__gétattr__ est donc un filet de sécurité : elle n'est appelee QUE quand l'attribut n'a pas ete trouve normalement.

class Config:
def __init__(self):
self.debug = True

def __getattr__(self, name):
return f"Attribut '{name}' inconnu"

c = Config()
print(c.debug) # True (trouve normalement)
print(c.verbose) # "Attribut 'verbose' inconnu" (via __gétattr__)

Écris une classe DictAvecDéfaut qui s'utilise comme un objet a attributs. Le constructeur prend un dictionnaire et un défaut. Quand on accede a un attribut qui existe comme clé du dictionnaire, on obtient sa valeur. Sinon, on obtient la valeur par défaut.

Exemple :
d = DictAvecDéfaut({'nom': 'Alice', 'age': 30}, 'inconnu')
d.nom renvoie 'Alice'
d.ville renvoie 'inconnu'

Tests (3/4)

Attribut existant
d = DictAvecDéfaut({'nom': 'Alice'}, 'inconnu')
assert d.nom == 'Alice'
Attribut manquant
d = DictAvecDéfaut({'nom': 'Alice'}, 'inconnu')
assert d.ville == 'inconnu'
Dict vide
d = DictAvecDéfaut({}, 0)
assert d.x == 0

+ 0 tests cachés

Indices (3 disponibles)

solution.py