파이썬의 클래스 기반 데코레이터
6606 단어 pythonbeginnersprogramming
이 기사에서는 클래스 기반 데코레이터를 만들고 이를 사용하여 함수를 장식하는 방법을 배웁니다.
class HelloDecorator:
"""Simple class decorator"""
def __init__(self, func):
self.func = func
def __call__(self, *args, **kwargs):
"""Simple class call method"""
print(f'Calling {self.func.__name__}')
result = self.func(*args, **kwargs)
return result
@HelloDecorator
def add(a, b):
"""Simple function that returns sum of two numbers"""
return a + b
if __name__ == '__main__':
output1 = add(2, 2)
print('Result:: ', output1)
Calling add
Result:: 4
좋습니다. 데코레이터를 작동시켰습니다. help, name 및 doc 속성을 살펴보겠습니다.
help(add) # --> prints class definition
print(add.__doc__) # --> prints Simple class decorator
print(add.__name__) # --> Raises AttributeError
문서 문자열을 수정해 보겠습니다.
funct_tools.partial
를 사용하여 get magic 메서드를 정의한 다음 funct_tools.update_wrapper
를 사용하여 Python에 래핑된 함수를 알립니다.from functools import update_wrapper, partial
class HelloDecorator:
"""Simple class decorator"""
def __init__(self, func):
self.func = func
# fixes __name__ and __doc__ attributes
update_wrapper(self, func)
def __get__(self, obj):
"""Fixes help description"""
return partial(self, obj)
def __call__(self, *args, **kwargs):
"""Simple class call method"""
print(f'Calling {self.func.__name__}')
result = self.func(*args, **kwargs)
return result
이제 문서를 확인하겠습니다.
help(add) # --> prints
"""
add(a, b)
Simple function that returns sum of two numbers
"""
print(add.__doc__) # --> prints "add"
print(add.__name__) # --> prints "Simple function that returns sum of two numbers"
결론적으로 일부는 클래스 기반 데코레이터를 선호할 수 있지만 개인적으로 문서 문자열을 수정하기 위한 추가 상용구 코드 때문에 클래스 기반 데코레이터를 선호하지 않습니다.
다음 글에서는 다양한 종류의 데코레이터 레시피를 구현해 보겠습니다. 다가오는 기사를 계속 지켜봐주십시오. 내 미래 기사를 얻으려면 나와 연결하십시오.
Reference
이 문제에 관하여(파이썬의 클래스 기반 데코레이터), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/kcdchennai/class-based-decorators-in-python-1kmi텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)