반응형
Decorator 란?
함수 A를 다른 명령을 받아 또 다른 함수 B로 호출 하는 것이다.
바로 예를 들어보겠습니다.
# 함수 장식자(decorator
def make2(fn):
return lambda:'파이썬 ' + fn() # '파이썬'과 fn() 함수를 합쳐서 리턴
def make1(fn):
return lambda:'공부를 '+fn()
def hello():
return '열심히'
hi = make2(make1(hello))
print(hi())
# 출력 결과
파이썬 공부를 열심히
기존 hello() 함수는 '열심히' 만을 반환하는 함수입니다.
하지만 이 함수를 mak1이라는 함수에 씌워주고, 그 겉에는 또 다시 make2라는 함수로 덮어주었습니다.
그 말은 make2함수의 '파이썬'을 출력하고 그 안에 호출할 함수 make1 에서 '공부를' 호출 후 hello의 '열심히' 를 호출하게 됩니다.
위와 같은 방법이 아닌 다른 방법으로는 '@' 키워드를 사용하여도 적용 가능합니다.
함수를 데코레이션('@')으로 사용할 경우
def make6(fn):
return lambda:'공부를 '+fn()
@make6
def hello1():
return '열심히'
print((hello1()))
# 출력 결과
공부를 열심히
클래스를 데코레이션('@') 으로 사용할 경우
class prac(object):
def __init__(self, fn):
self.fn = fn
def __call__(self, *args, **kwargs):
result = self.fn(*args, **kwargs)
print(f'Result: {result}')
return result
@prac
def add(a, b):
return a + b
add(5,1)
# 출력 결과
Result: 6
반응형
'python' 카테고리의 다른 글
python - 클래스 (0) | 2020.05.10 |
---|---|
python - 재귀함수 (0) | 2020.05.10 |
python - 파이썬은 1급 함수인가 ? (0) | 2020.05.08 |
python - 가변인수 (0) | 2020.05.08 |
python - range (0) | 2020.05.08 |