Decorator란?
디자인 패턴 중 하나인 decorator pattern과 비슷한 개념으로, 반복적인 것을 공통화하고, 메소드나 클래스의 기능을 확장할 수 있는 방법이다.
자세한 내용은 예제를 통해 알아보자.
Decorator 예제
- 먼저 decorator로 사용할 function을 정의한다.
- function 상단에 @ 심볼과 decorator function명을 입력한다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
def decorator_func(original_function):
def wrapper():
print("decorator 호출")
return original_function()
return wrapper
@decorator_func
def func():
print('func 호출')
func()
# decorator 호출
# func 호출
|
- function arguments도 추가할 수 있다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
def decorator_func(original_function):
def wrapper(*args, **kwargs):
print("decorator 호출")
return original_function()
return wrapper
@decorator_func
def func(name):
print('func({}) 호출'.format(name))
func("func")
# decorator 호출
# func(alex) 호출
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
def time_logging_func(func):
def wrapper(*args, **kwargs):
print(datetime.datetime.now())
return func(*args, **kwargs)
return wrapper
def decorator_func(func):
def wrapper(*args, **kwargs):
print("decorator 호출")
return func(*args, **kwargs)
return wrapper
@time_logging_func
@decorator_func
def func(name):
print('func({}) 호출'.format(name))
func("alex")
# 2020-06-06 23:49:27.586175
# decorator 호출
# func(alex) 호출
|