매개변수가 있는 Python 데코레이터
8906 단어 pythonbeginnersprogramming
매개변수가 있는 함수 기반 데코레이터
from functools import wraps
def hello_decorator(num):
"""Simple decorator function that supports parameters"""
def inner_func(func):
@wraps(func)
def wrapper(*args, **kwargs):
"""Simple decorator wrapper function"""
result = func(*args, **kwargs)
result = result + num
return result
return wrapper
return inner_func
@hello_decorator(100)
def add(a, b):
"""Simple function that returns sum of two numbers"""
return a + b
@hello_decorator(200)
def multiply(a, b):
"""Simple function that returns multiplication of two numbers"""
return a * b
if __name__ == '__main__':
output1 = add(2, 2)
print('Result:: ', output1)
print("=" * 25)
output2 = multiply(4, 2)
print('Result:: ', output2)
보시다시피 구조는 이전 예제와 약간 다릅니다.
@hello_decorator(100)
- 이것은 데코레이터에 인수를 전달할 수 있는 방법입니다hello_decorator
함수가 내부 함수를 반환합니다. inner_func
는 장식할 함수를 인수로 사용하고 래퍼 함수를 반환합니다. add
함수를 실행하고 인수result = result + num
를 기준으로 출력을 조작하고 최종 결과매개변수가 있는 클래스 기반 데코레이터
from functools import wraps
class HelloDecorator:
"""Simple class decorator"""
def __init__(self, num):
self.num = num
def __call__(self, func):
@wraps(func)
def wrapper(*args, **kwargs):
"""Simple class call method"""
result = func(*args, **kwargs)
result = result + self.num
return result
return wrapper
@HelloDecorator(100)
def add(a, b):
"""Simple function that returns sum of two numbers"""
return a + b
@HelloDecorator(200)
def multiply(a, b):
"""Simple function that returns multiplication of two numbers"""
return a * b
if __name__ == '__main__':
output1 = add(2, 2)
print('Result:: ', output1)
output2 = multiply(4, 2)
print('Result:: ', output2)
매개변수가 있는 이 클래스 기반 데코레이터는 간단한 함수 기반 데코레이터와 매우 유사합니다. 이 방법의 가장 좋은 점은 문서 문자열을 수정하기 위해 추가 상용구 코드가 필요하지 않다는 것입니다.
이제 인수가 있는 데코레이터를 구현하려면 클래스 기반 접근 방식을 선호합니다. 매우 직관적이고 추가 내부 기능과 문서에 대한 추가 상용구 코드 수정이 필요하지 않기 때문입니다.
지금까지 예제를 통해 기본 데코레이터 구현을 다루었습니다. 다음 글에서는 다양한 종류의 데코레이터 레시피를 구현해 보겠습니다. 다가오는 기사를 계속 지켜봐주십시오. 뉴스레터를 구독하고 내 향후 기사를 받으려면 나와 연결하십시오.
Reference
이 문제에 관하여(매개변수가 있는 Python 데코레이터), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/kcdchennai/python-decorators-with-parameters-3kii텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)