Leçon 4 / 10 — Chapitre 4: Décorateurs
Préserver l'identité de la fonction avec functools.wraps
Sans précaution, une fonction décorée perd son nom d'origine : dire_bonjour.__name__ affiche "enveloppe" après décoration, pas "dire_bonjour" — gênant pour le débogage ou la documentation automatique. functools.wraps corrige ce problème.
from functools import wraps
def journaliser(fonction):
@wraps(fonction)
def enveloppe(*args, **kwargs):
return fonction(*args, **kwargs)
return enveloppe
@journaliser
def dire_bonjour():
"""Affiche un message de bienvenue."""
print("Bonjour")
print(dire_bonjour.__name__)
print(dire_bonjour.__doc__)
Ce code affiche dire_bonjour, puis Affiche un message de bienvenue. : @wraps(fonction), placé juste au-dessus d'enveloppe, copie automatiquement le nom (__name__) et la docstring (__doc__) de la fonction d'origine sur l'enveloppe — sans @wraps, les deux afficheraient plutôt "enveloppe" et None.
wraps est lui-même un décorateur, avec un argument (fonction) : la prochaine leçon montre comment écrire ce style de décorateur paramétré soi-même.
Bonne pratique à retenir : ajouter systématiquement @wraps(fonction) à un décorateur, dès qu'il enveloppe une fonction, pour préserver son identité.
À vous de jouer : ajoutez @wraps(fonction) à un décorateur déjà écrit, et vérifiez que __name__ de la fonction décorée reste correct.
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