Aller au contenu principal
🔒 Mode aperçu. Les quinze premières leçons Foundations sont gratuites ; celle-ci est Pro. Démarrez un trial de 7 jours pour débloquer l'éditeur, les conseils AI et le reste du programme. Carte requise, annulez à tout moment dans Dashboard.Démarrer le trial de 7 jours →
← CoursSenior Deep-DivesModule 11 · Decorator patterns at scaleClass-based decorators — when the wrapper needs statepredict152 / 161
+150 XP
Tâche
📝 **Tâche :** Prédisez la sortie à 6 lignes. Une classe `CallCounter` enveloppe `greet` en tant que décorateur. Chaque appel incrémente « self.count ». Après trois appels, l'attribut count est accessible depuis l'EXTÉRIEUR — c'est le super pouvoir du décorateur basé sur les classes par rapport à celui basé sur la fermeture. 📋 Implémentez la fonction ci-dessus. Les tests s'exécutent automatiquement. 💡 **Indice :** Relisez la théorie si vous êtes bloqué.
Prédis la sortie

Lis le code attentivement

class CallCounter:
    def __init__(self, fn) -> None:
        self.fn = fn
        self.count = 0
        self.__name__ = fn.__name__

    def __call__(self, *args, **kwargs):
        self.count += 1
        return self.fn(*args, **kwargs)


@CallCounter
def greet(name: str) -> str:
    return f"hi {name}"


print(greet("a"))
print(greet("b"))
print(greet("c"))
print(f"calls: {greet.count}")
print(greet.__name__)
print(type(greet).__name__)

Que va afficher le programme ? Écris ici :

💬 Discussion

Soyez le premier à poser une question ou partager une astuce.
Connectez-vous pour rejoindre la discussion. La lecture est gratuite.
Chargement de la discussion…