[Python] 데코레이터
- Language/Python
- 2020. 10. 19.
데이코레이터 기능은 자동완성의 기본이다.
앞에 설명했던 @staticmethod, @classmethod, @abstractmethod 또한 데코레이터다
데코레이터는 @ 붙여서 실행한다.
def trace(func):
def wrapper():
print(func.__name__, '함수 시작')
func()
print(func.__name__, '함수 끝')
return wrapper
def hello():
print('hello')
def world():
print('world')
trace_hello = trace(hello)
trace_hello()
trace_world = trace(world)
trace_world()
이너 함수를 이용해서 실험을 해보았다.
이너함수 자체가 처음 본다면 이해하기 어렵지만, 결과적으로
'hello'가 출력 되는 것을 확인 할 수 있다.
def tracea(func):
def wrapper():
print(func.__name__, '함수 시작')
func()
print(func.__name__, '함수 끝')
return wrapper
@tracea
def hello():
print('hello')
@tracea
def world():
print('world')
hello()
world()
데코레이터를 사용할 경우 코드가 매우 간단해진다.
데코레이터가 자동으로 tracea 함수를 찾아주기 때문이다.
데코레이터 클래스 사용하기
class Trace:
def __init__(self, func):
print('abc')
self.func = func
def __call__(self):
print(self.func.__name__, '함수 시작')
self.func()
print(self.func.__name__, '함수 끝')
@Trace
def hello():
print('hello')
hello()
데코레이터를 클래스 사용할 경우도 함수처럼 비슷하게 만들면 된다.
__call__은 인스턴스 함수처럼 호출하게 해주는 메서드다.
반응형
'Language > Python' 카테고리의 다른 글
[파이썬] 세션과 쿠키의 차이 (0) | 2020.11.06 |
---|---|
[파이썬] get, post 방식 가져오기 (0) | 2020.11.06 |
[Python] 코루틴 사용하기 (1) | 2020.10.19 |
[Python] 예외처리하기 (0) | 2020.10.19 |
[Python] 클래스 상속하기 (0) | 2020.10.16 |