Maison >développement back-end >Tutoriel Python >Comment « functools.wraps » préserve-t-il les attributs de fonction d'origine dans les décorateurs Python ?
Comprendre functools.wraps
Dans la programmation Python, les décorateurs sont couramment utilisés pour ajouter des fonctionnalités aux fonctions. Cependant, l'utilisation de décorateurs peut parfois remplacer la fonction d'origine par une nouvelle, entraînant la perte d'attributs de fonction importants tels que le nom, la docstring et la liste d'arguments.
C'est là que functools.wraps entre en jeu. C'est un décorateur qui permet aux utilisateurs de conserver les attributs de la fonction d'origine lors de l'application d'un décorateur. Essentiellement, il « enveloppe » la nouvelle fonction créée par le décorateur avec les attributs de la fonction d'origine.
Considérez l'exemple suivant :
def logged(func): @wraps(func) def with_logging(*args, **kwargs): print(func.__name__ + " was called") return func(*args, **kwargs) return with_logging
Lorsque vous utilisez ce décorateur, il garantit que la fonction conserve son nom d'origine, sa docstring et sa liste d'arguments, même si elle a été modifiée par la fonctionnalité de journalisation. Voici un exemple de son fonctionnement :
@logged def f(x): """does some math""" return x + x * x print(f.__name__) # prints 'f' print(f.__doc__) # prints 'does some math'
Sans functools.wraps, le décorateur aurait remplacé la fonction originale par une nouvelle fonction avec un nom différent et sans docstring, ce qui rendrait difficile son identification et son interprétation. le comportement de la fonction.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!