Maison > développement back-end > Tutoriel Python > Que fait « functools.wraps » dans les décorateurs Python ?

Que fait « functools.wraps » dans les décorateurs Python ?

Mary-Kate Olsen
Libérer: 2024-12-01 04:33:17
original
802 Les gens l'ont consulté

What Does `functools.wraps` Do in Python Decorators?

Dévoilement des fonctionnalités de functools.wraps

Dans le domaine des décorateurs Python, la question se pose : quel est le but de functools.wraps ?

Compréhension Décorateurs

Les décorateurs nous permettent d'améliorer les fonctionnalités des fonctions existantes en les enveloppant avec une logique personnalisée. Cependant, ce processus d'encapsulage peut entraîner la perte des métadonnées associées à la fonction d'origine, à savoir son nom, sa documentation et sa liste d'arguments.

Présentation de functools.wraps

C'est là que functools.wraps entre en jeu. C'est un décorateur qui s'attaque au problème de la perte de métadonnées. En appliquant @wraps(func) à une fonction de décorateur, nous demandons au décorateur d'hériter des métadonnées de la fonction d'origine.

Comment fonctionne functools.wraps

  • Préserve le nom de la fonction : Empêche le remplacement du nom de la fonction décorée par le nom de la fonction. décorateur.
  • Maintient Docstring : Copie la documentation de la fonction d'origine dans la fonction décorée.
  • Conserver les arguments : Garantit que la fonction décorée conserve la même signature d'argument comme fonction d'origine.

Exemple Utilisation

Considérons 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

@logged
def f(x):
    """Computes a mathematical operation."""
    return x + x * x
Copier après la connexion

En appliquant @wraps(func) au décorateur connecté, nous nous assurons que la fonction enveloppée f conserve son nom d'origine, sa documentation, et liste d'arguments :

  • print(f.__name__) sorties 'f'
  • print(f.__doc__) imprime 'Calcule une opération mathématique.'

Conclusion

functools.wraps joue un rôle crucial dans la préservation des métadonnées des fonctions enveloppées par les décorateurs, garantissant que les informations essentielles ne sont pas perdues. En utilisant @wraps(func), nous pouvons créer des décorateurs flexibles et informatifs qui améliorent efficacement le comportement des fonctions sans compromettre leurs caractéristiques d'origine.

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal