Python 데코레이터(Decorator)
함수를 받아 명령을 추가한 뒤 이를 다시 함수의 형태로 반환하는 함수이다.
함수의 내부를 수정하지 않고 기능에 변화를 주고 싶을 때 사용한다 .
일반적으로 함수의 전처리나 후처리에 대한 필요가 있을때 사용을 한다.
또한 데코레이터를 이용해, 반복을 줄이고 메소드나 함수의 책임을 확장한다
데코레이터의 구조
함수로 만드는 데코레이터는 일반적으로 아래와같은 구조를 가지고 있다.
def out_func(func): # 기능을 추가할 함수를 인자로
def inner_func(*args, **kwargs):
return func(*args, **kwargs)
return inner_func
example.py
def decorator(func): def wrapper(*args, **kwargs):
print('전처리')
print(func(*args, **kwargs))
print('후처리') return wrapper@decorator
def example():
return '함수'example()
'''''''''
전처리
함수
후처리
'''''''''
클래스로 만드는 데코레이터 구조는 다음과 같다
class Decorator:
def __init__(self, function):
self.function = function
def __call__(self, *args, **kwargs):
return self.function(*args, **kwargs)
example.py
class Decorator:
def __init__(self, function):
self.function = function
def __call__(self, *args, **kwargs):
print('전처리')
print(self.function(*args, **kwargs))
print('후처리')@Decorator
def example():
return '클래스'example()
'''''''''
전처리
클래스
후처리
'''''''''