> 백엔드 개발 > 파이썬 튜토리얼 > Python 데코레이터에서 `functools.wraps`는 무엇을 합니까?

Python 데코레이터에서 `functools.wraps`는 무엇을 합니까?

Mary-Kate Olsen
풀어 주다: 2024-12-01 04:33:17
원래의
800명이 탐색했습니다.

What Does `functools.wraps` Do in Python Decorators?

functools.wraps의 기능 공개

Python 데코레이터 영역 내에서 다음과 같은 질문이 제기됩니다. functools.wraps의 목적은 무엇입니까? ?

이해 데코레이터

데코레이터를 사용하면 기존 기능을 사용자 정의 논리로 래핑하여 기능을 향상시킬 수 있습니다. 그러나 이 래핑 프로세스로 인해 원래 함수와 관련된 메타데이터, 즉 이름, 문서 및 인수 목록이 손실될 수 있습니다.

functools.wraps 소개

여기가 functools.wraps가 작동하는 곳입니다. 메타데이터 손실 문제를 해결하는 데코레이터입니다. @wraps(func)를 데코레이터 함수에 적용하여 데코레이터에게 원래 함수의 메타데이터를 상속하도록 지시합니다.

functools.wraps 작동 방식

  • 함수 이름 유지: 장식된 함수의 이름이 해당 함수의 이름으로 바뀌는 것을 방지합니다. decorator.
  • Docstring 유지: 원래 함수의 문서를 데코레이팅된 함수에 복사합니다.
  • 인수 유지: 데코레이팅된 함수가 동일하게 유지되는지 확인합니다. 인수 서명을 원본으로 사용 function.

사용 예

다음 예를 고려하세요.

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):
    """Computes a mathematical operation."""
    return x + x * x
로그인 후 복사

기록된 데코레이터에 @wraps(func)를 적용하여 , 래핑된 함수 f가 원래 이름, 문서 및 인수를 유지하는지 확인합니다. list:

  • print(f.__name__)는 'f'를 출력합니다.
  • print(f.__doc__)는 '수학 연산을 계산합니다.'

를 인쇄합니다. 결론

functools.wraps가 중요한 역할을 합니다. 데코레이터로 래핑된 함수의 메타데이터를 보존하여 필수 정보가 손실되지 않도록 합니다. @wraps(func)를 사용하면 원래 특성을 손상시키지 않으면서 함수 동작을 효과적으로 향상시키는 유연하고 정보가 풍부한 데코레이터를 만들 수 있습니다.

위 내용은 Python 데코레이터에서 `functools.wraps`는 무엇을 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿