반응형
decorator란 다른 함수를 반환하는 함수인데, @wrapper 문법을 사용하여 대게는 함수를 변환하는 형태로 적용된다.
다음 예시는 그냥 쓰는 방법과 @으로 데코레이터를 쓰는 방법이다.
def formatter(func):
def wrapper():
print("Function Start")
func()
print("Function End")
return wrapper
def foo():
print("foo")
@formatter
def boo():
print("boo")
if __name__ == "__main__":
print('그냥 쓰기')
foo()
print('넣어서 쓰기')
decorated_foo = formatter(foo)
decorated_foo()
print('@으로 데코레이터 쓰기')
boo()
가변 인수를 사용하는 데코레이터
def formatter(func):
def wrapper(*args, **kwargs):
result = func(*args, **kwargs)
print("Sum is {}".format(result))
return result
return wrapper
@formatter
def sum(a, b):
return a+b
print('더해보기')
sum(3,4)
sum(5,8)
sum(1,1)
클래스 내에서 가변 인수를 사용하는 데코레이터
def formatter(func):
def wrapper(self, *args, **kwargs):
result = func(self, *args, **kwargs)
print("Sum is {}".format(result))
return result
return wrapper
@formatter
def sum(a, b):
return a+b
print('더해보기')
sum(3,4)
sum(5,8)
sum(1,1)
[1] Python Documentation, https://docs.python.org/3/glossary.html
[2] 코딩도장, "Unit.42. 데코레이터 사용하기," https://dojang.io/mod/page/view.php?id=2427
[3] jiffydev, "TIL 6. Decorator," https://velog.io/@jiffydev/TIL-6.-Decorator
** EOF **
728x90
'SW' 카테고리의 다른 글
[PyQt5] callback 함수에 인자로 함수 포인터와 값 전달하기 (0) | 2023.08.06 |
---|---|
[Python] pypubsub으로 Pub-Sub 메시지 보내보기 (0) | 2023.08.06 |
[토막] Python 코드 실행 시간 측정 (0) | 2023.07.27 |
C++ Singleton pattern with template (0) | 2023.06.09 |
C/C++ 프로그램에 빌드시간 찍어놓기 : __TIME__, __DATE__ (0) | 2023.06.07 |