Leçon 10 / 10 — Chapitre 4: Décorateurs
Cas pratique : un décorateur de journalisation réutilisable
Cette dernière leçon combine functools.wraps, *args/**kwargs, et un décorateur avec argument, dans un décorateur de journalisation configurable.
from functools import wraps
def journaliser(niveau="INFO"):
def decorateur(fonction):
@wraps(fonction)
def enveloppe(*args, **kwargs):
print(f"[{niveau}] Appel de {fonction.__name__} avec {args} {kwargs}")
resultat = fonction(*args, **kwargs)
print(f"[{niveau}] {fonction.__name__} a renvoye {resultat}")
return resultat
return enveloppe
return decorateur
@journaliser(niveau="DEBUG")
def diviser(a, b):
return a / b
diviser(10, 2)
Ce que fait chaque partie :
journaliser(niveau="INFO")est un décorateur avec argument (vu dans ce chapitre) : il reçoitniveau, et renvoiedecorateur, qui reçoit à son tour la fonction à décorer.@wraps(fonction)préservefonction.__name__(vu dans ce chapitre), utilisé dans les messages affichés.enveloppe(*args, **kwargs)accepte n'importe quelle fonction, quels que soient ses paramètres (vu dans ce chapitre), et retransmet ces arguments àfonction(*args, **kwargs).
Ce code affiche [DEBUG] Appel de diviser avec (10, 2) {}, puis [DEBUG] diviser a renvoye 5.0 : niveau="DEBUG" a été fixé à la décoration, et réutilisé dans les deux messages affichés à chaque appel de diviser.
À vous de jouer : appliquez journaliser avec un niveau différent (par exemple "ERREUR") à une autre fonction, et vérifiez que ce niveau apparaît bien dans les messages.
Continuez ce module
Débloquez les leçons restantes ainsi que la certification finale.
2 500 XOF / 3,81 € / 4,15 $
Débloquez les 87 leçons restantes de ce module
Votre paiement est vérifié avant l'activation de l'accès