유형 변환, 로깅 또는 메모와 같이 함수의 인수를 변경하는 일반 데코레이터로 함수를 장식할 때 문제가 발생합니다. 데코레이팅된 함수는 원래 함수의 문서와 서명을 상속하지 못하여 동작을 이해하기 어렵습니다.
이 문제를 해결하기 위해 여러 가지 해결 방법이 제안되었습니다.
pip를 사용하여 '데코레이터' 모듈을 설치하고 decorator. decorator 주석을 포함하도록 데코레이터 정의를 수정합니다. 이렇게 하면 함수 시그니처를 유지하면서 데코레이터가 일반 상태로 유지됩니다.
<code class="python">import decorator @decorator.decorator def args_as_ints(f, *args, **kwargs): # Perform argument conversion return f(*args, **kwargs)</code>
Python 3.4 이상의 경우 'functools.wraps( )'은 함수의 서명과 문서를 모두 자동으로 보존하는 대체 솔루션을 제공합니다.
<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>
두 방법 모두 원래 함수의 서명과 문서를 효과적으로 보존합니다. '데코레이터' 모듈은 Python 2 및 3에 적합한 반면, 'functools.wraps()'는 Python 3.4 이상에서만 사용할 수 있습니다.
위 내용은 장식된 함수의 서명을 보존하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!