> 백엔드 개발 > 파이썬 튜토리얼 > Python에서 데코레이터를 효과적으로 사용하고 연결하는 방법은 무엇입니까?

Python에서 데코레이터를 효과적으로 사용하고 연결하는 방법은 무엇입니까?

Linda Hamilton
풀어 주다: 2025-01-01 08:10:10
원래의
539명이 탐색했습니다.

How to Effectively Use and Chain Decorators in Python?

Python에서 데코레이터를 만들고 연결하는 방법

데코레이터 만들기

라는 다른 함수를 사용하는 데코레이터 함수를 작성합니다. "래핑된" 함수 인수:

def my_decorator(func):

    # Code to execute before calling the wrapped function
    print("Before the function runs")

    # Call the wrapped function and store its return value
    result = func()

    # Code to execute after calling the wrapped function
    print("After the function runs")

    # Return the result of the wrapped function
    return result

# Example of a decorator in action
@my_decorator
def say_hello():
    print("Hello, world!")
로그인 후 복사

데코레이터 연결

동일한 기능에 여러 데코레이터를 적용하려면 @ 연산자를 사용하세요.

@my_decorator
@another_decorator
def chained_function():
    print("This function is doubly decorated")
로그인 후 복사

인수가 있는 데코레이터

데코레이터가 수락하도록 허용 인수:

def decorator_with_arg(arg1, arg2):

    def decorator(func):

        # Use the decorator arguments to modify the wrapped function's behavior
        func.arg1 = arg1
        func.arg2 = arg2

        return func

# Example of a decorator with arguments
@decorator_with_arg("foo", "bar")
def my_function():
    print("Args:", my_function.arg1, my_function.arg2)
로그인 후 복사

클래스 메소드용 데코레이터

클래스의 메소드에 데코레이터 사용:

class MyClass:

    @classmethod
    def my_class_method(cls):
        print("This is a class method")
로그인 후 복사

연습: 장식 데코레이터

무엇이든 만들 수 있는 데코레이터를 만듭니다. 다른 데코레이터는 인수를 허용합니다:

def decorator_with_args(decorator_to_enhance):

    def decorator_maker(*args, **kwargs):

        def decorator_wrapper(func):

            # Wrap the original decorator and pass the arguments
            return decorator_to_enhance(func, *args, **kwargs)

        return decorator_wrapper


# Example of a decorated decorator
@decorator_with_args
def decorated_decorator(func, *args, **kwargs):
    print("Args:", args, kwargs)
    return func


@decorated_decorator(10, 20, name="John")
def my_function():
    print("Decorated function")
로그인 후 복사

모범 사례

  • 데코레이터 오버헤드로 인해 코드 속도가 느려지는 것을 방지하세요.
  • functools.wraps를 사용하세요. () 원래 함수의 정보를 보존합니다.
  • 데코레이터는 한 번만 영구적입니다. 함수에 적용됩니다.
  • 외부 라이브러리의 기존 기능을 디버깅하거나 확장하려면 이를 사용하는 것이 좋습니다.

사용 예

데코레이터 사용 다음과 같은 작업:

  • 함수 실행 시간 측정 (@benchmark)
  • 함수 호출 로깅(@logging)
  • 함수 호출 계산(@counter)
  • 함수 결과 캐싱

위 내용은 Python에서 데코레이터를 효과적으로 사용하고 연결하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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