파이썬 데코레이터 예제

기능의 이해와 함께, 이제 데코레이터를 이해합시다. 파이썬에서 함수는 일류 객체이며, 이는 – 또한 짧고 달콤한 파이썬 데코레이터 치트 시트를 함께 넣었습니다 : 다른 함수 내에서 함수를 정의 할 수 있습니다. 이러한 함수를 내부 함수라고 합니다. 다음은 두 가지 내부 함수가 있는 함수의 예입니다. 파이썬에서 함수는 일류 시민이며 객체이며, 이는 우리가 그들과 함께 많은 유용한 것들을 할 수 있다는 것을 의미합니다. 다음으로 파이썬의 다른 함수 내에서 함수를 정의하는 방법을 설명합니다. 나와 함께 있어, 우리는 곧이 모든 것이 파이썬에서 데코레이터를 만들고 이해하는 데 어떻게 관련이 있는지 알게 될 것입니다. 앞에서 설명했듯이 @slow_down 이전 구현은 항상 1초 동안 잠을 잘 수 있습니다. 이제 데코레이터에 매개 변수를 추가하는 방법을 알고 있으므로 잠자는 속도를 제어하는 선택적 비율 인수를 사용하여 @slow_down 다시 작성해 보겠습니다. 예제를 사용하여 아래에 표시됩니다.

클래스에서 데코레이터를 사용하는 다른 방법은 전체 클래스를 장식하는 것입니다. 예를 들어 Python 3.7의 새 데이터 클래스 모듈에서 수행: 여러 데코레이터를 서로 겹치도록 스택하여 함수에 적용할 수 있습니다. e의 근사치는 다음 시리즈 확장을 기반으로 합니다: 우리가 예상했던 것과는 다름입니다! 그 이름은 “a_function_요구_장식”입니다. 그럼 우리의 기능은 wrapTheFunction로 대체되었습니다. 그것은 우리의 함수의 이름과 문서 문자열을 덮어. 다행히 파이썬은 우리에게이 문제를 해결하기 위한 간단한 기능을 제공하며 functools.wraps입니다. functools.wraps를 사용 하 여 우리의 이전 예제를 수정 하자: 이 예제에서는 실제 값 e = 2.718281828에 괜찮은 근사치를 얻을, 만 추가 5 용어. 대신, 파이썬은 @기호(“파이” 구문이라고도 함)를 사용하여 더 간단한 방법으로 데코레이터를 사용할 수 있습니다. 다음 예제는 첫 번째 데코레이터 예제와 동일한 작업을 수행합니다. 유일한 차이점은 func 대신 cls를 매개 변수 이름으로 사용하여 클래스 데코레이터가 된다는 것을 나타냅니다. 참고: 원하는 대로 내부 함수의 이름을 지정할 수 있으며 래퍼()와 같은 일반 이름은 일반적으로 괜찮습니다. 이 기사에서는 많은 데코레이터를 볼 수 있습니다.

구분하기 위해 내부 함수의 이름을 데코레이터와 이름이 같지만 래퍼_ 접두사로 이름을 지정합니다. 괄호 없이 first_child를 반환합니다. 이는 함수 first_child에 대한 참조를 반환한다는 것을 의미합니다.