데코레이터라고 막 쓰고 있는데,
함수 호출 이전에 호출되는 함수 정도로 알고 있었는데, 호출되는 함수 전체를 싸고 있는 함수구나
왜 쓰는지?
1. 즉 이미 구현한 함수를 고치거나 수정하지 않고 그 함수 앞 뒤로 어떤 조건이나 리턴을 수정하려면 데코레이터 함수를 만들어서 쓰도록 하자.
2. 중복되는 형태의 함수가 아주 많이 있다면, 데코레이터로 정의해서 코드 양을 줄일 수 있겠다.
예를 들면 try, except 구문이 거의 동일한 API 함수들이 아주 많다면 데코레이터로 정의해서 만들도록 하자.
아래분의 글을 보는게 나을 듯 하고, 난 의미만 알면되지.
아래 코드에서 보면, @함수 형태로 불리는 것이 데코레이터 함수이다.
class DecoratorClass: #1
def __init__(self, original_function):
self.original_function = original_function
def __call__(self, *args, **kwargs):
print '{} 함수가 호출되기전 입니다.'.format(self.original_function.__name__)
return self.original_function(*args, **kwargs)
@DecoratorClass #2
def display():
print 'display 함수가 실행됐습니다.'
@DecoratorClass #3
def display_info(name, age):
print 'display_info({}, {}) 함수가 실행됐습니다.'.format(name, age)
display()
print
display_info('John', 25)
-----------------------------------------
결과는...
display 함수가 호출되기전 입니다.
display 함수가 실행됐습니다.
display_info 함수가 호출되기전 입니다.
display_info(John, 25) 함수가 실행됐습니다.
https://www.daleseo.com/python-decorators/
>>> def decorate(func):
... def wrapper(*args, **kwargs):
... print("before")
... value = func(*args, **kwargs)
... print("after")
... return value
... return wrapper
...
>>> @decorate
... def give_hi():
... return "Hi"
...
>>> result = give_hi()
before
after
>>> print(result)
Hi
https://nachwon.github.io/decorator/
만드는 방법은?
2가지 방법으로 만들 수 있다는 것
1. 그냥 함수로 만들어도 되고
2. 클래스로 만들어도 되고 <-- 추가적인 인자나 기능을 다양하게 넣으려면 클래스로 만드는게 좋지 않을까?
자세한 만드는 방법도 위의 글을 참고합시다. 열심히 쓰신 분을 생각해서 원저작자 글을 보는게 좋을 듯
BJ.
'IT > 파이썬' 카테고리의 다른 글
파이썬 - 정규표현식 (0) | 2021.06.29 |
---|---|
파이썬 - 문자열에 숫자 접미사를 붙여서 리스트 만들기 - 한줄로! (0) | 2021.06.24 |
파이썬 - JSON 인지 아닌지 구분하는 is_json 함수 구현 (0) | 2021.06.22 |
Flask 와 React 를 결합한 서비스 - 자료 조사 (0) | 2021.06.15 |
파이썬 - 여러개 값 관리 - 리스트, 튜플, 딕셔너리 멀 쓰나? (0) | 2021.06.15 |