Preserving Signatures of Decorated Functions
Decorators are a powerful tool for enhancing the functionality of Python functions. However, they can sometimes obscure the original function's signature. This can be problematic for documentation, debugging, and automated tools.
Problem:
Consider a generic decorator that converts all arguments to integers:
1 2 3 4 5 6 |
|
While the decoration works as expected, the decorated function's signature is replaced with "args, *kwargs", losing information about the original arguments.
Workarounds:
Several workarounds exist, but none are fully satisfactory:
Solution:
decorator module offers an elegant solution:
1 2 3 4 5 6 7 |
|
This decorator preserves the original function's signature by passing it as arguments to the wrapped function.
Improved Decorator:
1 2 3 4 |
|
Now, the decorated function funny_function retains its original signature:
1 2 3 4 5 |
|
Python 3.4+:
For Python 3.4 and above, functools.wraps provides a similar solution:
1 2 3 4 5 6 7 8 9 |
|
By using these techniques, decorators can enhance function functionality while preserving their original signatures, ensuring clarity and consistency in the codebase.
위 내용은 Python에서 데코레이터를 사용할 때 함수 서명을 보존하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!