Préserver les signatures de fonctions avec les décorateurs
Les décorateurs sont un outil puissant en Python, mais ils peuvent également introduire des problèmes avec les signatures de fonctions décorées. Pour conserver la signature de la fonction d'origine, envisagez les approches suivantes :
Approche 1 : module décorateur
Installez le module décorateur (pip install decorator) et adaptez votre décorateur à l'utilisation sa syntaxe @decorator.decorator :
<code class="python">import decorator @decorator.decorator def args_as_ints(f, *args, **kwargs): args = [int(x) for x in args] kwargs = dict((k, int(v)) for k, v in kwargs.items()) return f(*args, **kwargs)</code>
Approche 2 : functools.wraps() (Python 3.4)
Python 3.4 a introduit functools.wraps(), qui préserve les signatures de fonction :
<code class="python">import functools def args_as_ints(func): @functools.wraps(func) def wrapper(*args, **kwargs): args = [int(x) for x in args] kwargs = dict((k, int(v)) for k, v in kwargs.items()) return func(*args, **kwargs) return wrapper</code>
Les deux approches préservent efficacement la signature de fonction après la décoration. De plus, functools.wraps() peut être utilisé pour la compatibilité avec les anciennes versions de Python.
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!