saluer.__name__ vaut 'wrapper' au lieu de 'saluer' saluer.__doc__ vaut None au lieu de 'Dit bonjour'
Pour eviter ce problème, Python fournit functools.wraps. C'est un decorateur que tu appliques sur le wrapper pour copier le nom, la docstring et d'autres attributs de la fonction originale.
Écris un decorateur logger qui affiche le nom de la fonction avant de l'appeler (avec print), puis renvoie le résultat. Utilise functools.wraps pour preserver le nom et la docstring.
Exemple : @logger def calculer(x): '''Calcule le double''' return x * 2
calculer.__name__ vaut 'calculer' calculer.__doc__ vaut 'Calcule le double'
Tests (3/4)
Nom preserve
@logger
def calculer(x):
'''Calcule le double'''
return x * 2
assert calculer.__name__ == 'calculer'
Docstring preservee
@logger
def calculer(x):
'''Calcule le double'''
return x * 2
assert calculer.__doc__ == 'Calcule le double'