PaliSkill
Python avancé

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