파이썬 데코레이터 순서

Abid Ullah 2023년10월10일
  1. 파이썬 데코레이터 순서
  2. Python에서 데코레이터 순서를 위한 전제 조건
  3. Python에서 @decorator의 구문
  4. Python에서 데코레이터 순서가 결정되는 방법
  5. 데코레이터 @decorator Python에서 주문
  6. 파이썬의 데코레이터의 두 가지 다른 종류
파이썬 데코레이터 순서

이 Python 기사에서는 데코레이터가 무엇인지, 어떻게 사용되는지, 코드를 빌드하는 데 데코레이터를 어떻게 활용할 수 있는지 살펴보겠습니다. 데코레이터가 응용 프로그램에 기능을 추가하는 데 사용할 수 있고 Python 프로그래밍 언어에서 찾을 수 있는 강력한 도구인 방법을 살펴보겠습니다.

파이썬 데코레이터 순서

Python에서 데코레이터는 다른 함수의 동작을 수정하는 특수 함수입니다. 데코레이터는 구조를 변경하지 않고 기존 객체에 새로운 기능을 추가하는 디자인 패턴으로 일반적으로 함수나 클래스를 정의하기 전에 호출됩니다.

파이썬의 데코레이터는 함수와 클래스를 수정하기 위한 강력한 도구입니다. 데코레이터는 다른 함수를 인수로 받아 원래 함수를 감싸는 새 함수를 반환하는 함수입니다.

또한 함수 자체의 코드를 변경하지 않고 함수의 동작을 수정하는 데 사용할 수도 있습니다. 이는 기존 함수에 기능을 추가하거나 특정 컨텍스트에서 함수의 동작을 변경하는 데 유용합니다.

데코레이터는 종종 다음과 같은 기능을 구현하는 데 사용됩니다.

  1. 캐싱
  2. 로깅
  3. 액세스 제어

Python에서 데코레이터 순서를 위한 전제 조건

데코레이터에 대해 배우기 전에 Python에 대한 근본적인 이해가 있어야 합니다.

우리는 파이썬의 모든 것이 객체, 심지어 클래스로 간주된다는 생각을 받아들여야 합니다. 우리가 이러한 것들에 제공하는 이름은 그것들과 연결된 식별자일 뿐입니다.

여기에는 예외가 없습니다. 함수도 객체(속성 포함)로 간주됩니다. 여러 고유 이름은 단일 함수 개체에 연결될 가능성이 있습니다.

따라서 다음과 같은 기본 지식이 있어야 합니다.

  1. 파이썬 프로그래밍 언어
  2. 기능
  3. 수업

그런 다음 Python에서 데코레이터 순서로 쉽게 작업할 수 있습니다.

Python에서 @decorator의 구문

다음 단계는 파이썬 데코레이터의 구문을 살펴보고 질문하는 것입니다. 파이썬은 데코레이터를 해석하는 순서를 어떻게 결정합니까?

예제 코드:

@mydecorator
def my_function():
    pass

이것이 파이썬에서 데코레이터의 구문입니다. 우리는 동일한 구문을 가진 함수 및 클래스와 함께 데코레이터를 사용할 것입니다.

Python에서 데코레이터 순서가 결정되는 방법

많은 데코레이터가 함수나 클래스에 적용될 때 데코레이터는 생성된 순서대로 사용됩니다. 이로 인해 예기치 않은 동작이 발생할 수 있습니다. 데코레이터가 적용되는 순서가 함수나 클래스의 작동 방식에 영향을 미칠 수 있으므로 이 사실을 명심해야 합니다.

데코레이터가 적용되는 순서가 클래스 또는 함수의 작동에 영향을 미칠 수 있음을 기억하는 것이 중요합니다. 여러 데코레이터가 구성 요소에 배치되면 데코레이터는 선언된 순서대로 배치됩니다.

데코레이터 @decorator Python에서 주문

Python에서 데코레이터는 일반적으로 함수를 인수로 사용하고 수정된 함수를 반환하는 함수로 구현됩니다. 예를 들어 다음 데코레이터를 고려할 수 있습니다.

아래 단계에 따라 코드를 작성하십시오.

  • def 키워드를 사용하여 함수를 정의합니다.
  • def 키워드를 사용하여 함수 내부에 다른 함수를 정의하십시오.
  • 명령문을 인쇄하거나 함수에 일부 기능을 추가하십시오.
  • 두 기능 모두에 return 문을 사용하십시오.
  • 데코레이터를 정의합니다.
  • 데코레이터의 구문에서 앞서 언급한 단계를 따릅니다.
  • 데코레이터에 대한 다른 함수를 정의하십시오.
  • 함수에 몇 가지 기능을 추가합니다. 더 나은 이해를 위해 아래 코드를 참조하십시오.
  • 데코레이터 함수를 인쇄하고 매개변수 x에 대한 값을 제공하십시오.

예제 코드:

def decorator(func):
    def wrapper(x):
        print("Before calling ", func.__name__)
        result = func(x)
        print("After calling ", func.__name__)
        return result

    return wrapper


@decorator
def foo(x):
    return x + 1


print(foo(2))

여기서 우리는 단순히 전체 코드의 출력을 보기 위해 인쇄하고 있습니다.

코드 출력:

Before calling  foo
After calling  foo
3

첫 번째 명령문이 출력되는 것을 볼 수 있습니다: (Before calling foo). 코드의 두 번째 명령문(After calling foo)이 두 번째로 출력됩니다.

그리고 decorator 부분이 마지막에 인쇄됩니다. 이는 데코레이터의 매개변수 값으로 값 2를 전달했기 때문에 x+1입니다. 그리고 결과적으로 3을 얻었습니다.

이제 데코레이터를 더 잘 이해하기 위해 다른 코드를 살펴보겠습니다.

그래서 우리는 이미 함수와 데코레이터를 정의하는 단계를 거쳤습니다. 요구 사항에 따라 동일한 단계를 다시 따를 것입니다.

이 코드에서 decorator 부분이 중첩 함수의 두 번째 문보다 먼저 실행되기를 원한다고 가정합니다. 그래서 우리는 다음 코드를 사용할 것입니다.

예제 코드:

def my_decorator(func):
    def wrapper():
        print("Before the function is called.")
        func()
        print("After the function is called.")

    return wrapper


@my_decorator
def say_hello():
    print("Hello, Abid!")


say_hello()

코드 출력:

Before the function is called.
Hello, Abid!
After the function is called.

여기에서 함수가 호출되기 전을 볼 수 있습니다. 먼저 인쇄됩니다. 안녕하세요, 아비드! 데코레이터 부분이 두 번째로 인쇄되고 함수가 호출된 후가 인쇄됩니다. 마지막에 인쇄됩니다.

파이썬의 데코레이터의 두 가지 다른 종류

이제 num() 메서드에 두 가지 데코레이터 함수를 적용하는 방법을 살펴보겠습니다. 내부 데코레이터가 먼저 작동하고 잠시 휴식을 취한 후 외부 데코레이터가 작동합니다.

예제 코드:

# code for testing decorator chaining
def decorator1(function):
    def inner():
        a = function()
        return a + a

    return inner


def decorator(function):
    def inner():
        a = function()
        return 4 * a

    return inner


@decorator1
@decorator
def num():
    return 10


print(num())

코드 출력:

80

따라서 위의 예에서 내부 데코레이터가 먼저 작동하고 외부가 그 다음에 작동합니다. 따라서 80 코드가 출력됩니다.

데코레이터가 적용되는 순서는 중요할 수 있습니다. 일반적으로 데코레이터는 호출되는 순서대로 함수와 클래스에 적용해야 합니다.

그러나 클래스에서 사용되는 데코레이터는 항상 데코레이터가 함수에 적용되기 전에 적용되어야 합니다.

작가: Abid Ullah
Abid Ullah avatar Abid Ullah avatar

My name is Abid Ullah, and I am a software engineer. I love writing articles on programming, and my favorite topics are Python, PHP, JavaScript, and Linux. I tend to provide solutions to people in programming problems through my articles. I believe that I can bring a lot to you with my skills, experience, and qualification in technical writing.

LinkedIn

관련 문장 - Python Decorator