Maison >développement back-end >Tutoriel Python >Comment 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 :
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>
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>
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!