Avancé
🧠 Fondamentaux
30 XP
0 personnes ont réussi
Délégation avec __gétattr__
En Python, quand tu accedes a un attribut qui n'existe pas sur un objet, Python appelle la méthode speciale __gétattr__. C'est un filet de sécurité : si l'attribut n'est pas trouve normalement, cette méthode est appelee en dernier recours.
Ca permet de deleguer transparentement a un objet interne. C'est le pattern Proxy : l'objet exterieur se comporte comme l'objet interne, avec des fonctionnalités en plus.
class Proxy: def __init__(self, cible): self._cible = cible
p = Proxy([1, 2, 3]) p.append(4) # delegue a la liste interne
Attention : __gétattr__ n'est appele QUE quand l'attribut n'est pas trouve normalement. Les méthodes definies sur ta classe sont toujours prioritaires.
Crée une classe Cache qui enveloppe une liste en ajoutant un cache de résultats : - Cache(liste) stocke la liste interne - max_cache() retourne le max et le met en cache (dans self._cache['max']) - min_cache() retourne le min et le met en cache - invalider() vide le cache - __gétattr__ delegue les attributs inconnus a la liste interne
Exemple : c = Cache([3, 1, 4, 1, 5]) c.max_cache() # 5 (calcule et met en cache) c.max_cache() # 5 (retourne le cache) c.append(6) # delegue a la liste interne via __gétattr__