>백엔드 개발 >파이썬 튜토리얼 >`functools.wraps`는 Python 데코레이터에서 원래 함수 속성을 어떻게 유지합니까?

`functools.wraps`는 Python 데코레이터에서 원래 함수 속성을 어떻게 유지합니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-12-01 21:10:15238검색

How Does `functools.wraps` Preserve Original Function Attributes in Python Decorators?

functools.wraps 이해

Python 프로그래밍에서 데코레이터는 일반적으로 함수에 기능을 추가하는 데 사용됩니다. 그러나 데코레이터를 사용하면 원래 함수를 새 함수로 대체하여 이름, 독스트링, 인수 목록과 같은 중요한 함수 속성이 손실될 수 있습니다.

여기서 functools.wraps가 작동합니다. 사용자가 데코레이터를 적용할 때 원래 함수의 속성을 유지할 수 있도록 해주는 데코레이터입니다. 기본적으로 데코레이터가 생성한 새 함수를 원래 함수의 속성으로 "래핑"합니다.

다음 예를 고려하세요.

def logged(func):
    @wraps(func)
    def with_logging(*args, **kwargs):
        print(func.__name__ + " was called")
        return func(*args, **kwargs)
    return with_logging

이 데코레이터를 사용할 때 다음 사항이 보장됩니다. 함수는 로깅 기능에 의해 수정되었더라도 원래 이름, 독스트링 및 인수 목록을 유지합니다. 작동 방식의 예는 다음과 같습니다.

@logged
def f(x):
    """does some math"""
    return x + x * x

print(f.__name__)  # prints 'f'
print(f.__doc__)   # prints 'does some math'

functools.wraps가 없으면 데코레이터는 원래 함수f를 문서화 문자열이 없고 이름이 다른 새 함수로 대체하여 식별하고 해석하기가 어렵습니다. 함수의 동작.

위 내용은 `functools.wraps`는 Python 데코레이터에서 원래 함수 속성을 어떻게 유지합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.