Comment préserver les signatures des fonctions décorées

Barbara Streisand
Libérer: 2024-10-17 16:59:02
original
797 Les gens l'ont consulté

How to Preserve Signatures of Decorated Functions

Préserver les signatures des fonctions décorées

Le problème survient lors de la décoration d'une fonction avec un décorateur générique qui modifie les arguments de la fonction, tels que la conversion de type, la journalisation ou la mémorisation. La fonction décorée ne parvient pas à hériter de la documentation et de la signature de la fonction d'origine, ce qui rend difficile la compréhension de son comportement.

Pour résoudre ce problème, plusieurs solutions de contournement ont été proposées :

Méthode 1 : utiliser l'option ' Module Decorator

Installez le module 'decorator' à l'aide de pip et modifiez la définition du décorateur pour inclure l'annotation decorator.decorator. Cela garantit que le décorateur reste générique tout en préservant la signature de la fonction :

<code class="python">import decorator

@decorator.decorator
def args_as_ints(f, *args, **kwargs):
    # Perform argument conversion
    return f(*args, **kwargs)</code>
Copier après la connexion

Méthode 2 : Utiliser 'functools.wraps()'

Pour Python 3.4 et supérieur, 'functools.wraps( )' propose une solution alternative qui préserve automatiquement à la fois la signature et la documentation de la fonction :

<code class="python">import functools

def args_as_ints(func):
    @functools.wraps(func)
    def wrapper(*args, **kwargs):
        # Perform argument conversion
        return func(*args, **kwargs)
    return wrapper</code>
Copier après la connexion

Conclusion

Les deux méthodes préservent efficacement la signature et la documentation de la fonction d'origine. Le module 'decorator' convient à Python 2 et 3, tandis que 'functools.wraps()' n'est disponible qu'en Python 3.4 et supérieur.

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
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
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!