Preserving Function Signatures with Decorators
Decorators are a powerful tool in Python, but they can also introduce problems with decorated function signatures. To preserve the original function's signature, consider the following approaches:
Approach 1: decorator module
Install the decorator module (pip install decorator) and adapt your decorator to use its @decorator.decorator syntax:
<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>
Approach 2: functools.wraps() (Python 3.4+)
Python 3.4 introduced functools.wraps(), which preserves function signatures:
<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>
Both approaches effectively preserve the function signature after decoration. Additionally, functools.wraps() can be used for compatibility with older Python versions.
以上是如何使用 Python 裝飾器保留函數簽名?的詳細內容。更多資訊請關注PHP中文網其他相關文章!