기존 함수나 클래스를 유지하면서 다양한 기능을 추가하는 장식이라고 생각하면 쉽다.(클래스에 대한 설명은 따로하지 않겠습니다.)
Decorator 는 일종의 Chain of Functions 입니다.
즉, 중첩함수를 리턴하는 함수만 데코레이터로 사용할 수 있습니다 .
이제부터는 예제를 통해서 예시를 보여드리겠습니다 .
def decoratorExam(func):
def childFunc(*args, **kwarg):
func(*args, **kwarg)
return childFunc
def goAdd(a, b):
print("a+b = ", (a + b))
goAdd(3, 4)
위는 기본 데코레이터 예시입니다. 아래는 같은 함수에 Text를 더 추가해 보았습니다.
def name_decorator(text):
def decorator(func):
def new_func(*args, **kwargs):
print(" ㄷㅔ코레이터를 적용한 함수")
result = str(func(*args, **kwargs))+text
return result
return new_func
return decorator
@name_decorator("데코레이터 함수 응용")//요렇게 쓸수도 있지롱
def add_a_b(a, b):
return a+b
print(add_a_b(10, 20))
result : ㄷㅔ코레이터를 적용한 함수
30 string
다음은 데코레이터 클래스 예제를 보여드리겠습니다.
class decoClass:
def init(self, func):
self.func = func
print("I'm deco class")
def __call__(self, *args, **kwargs):
print("this is deco class Function")
self.func(*args, **kwargs)
@decoClass
def test(a, b, c):
print("Variables : ", a, b, c)
test(1, 3, 4)
데코 안에서 데코레이터
class decoClass2:
def _decorator(func):
def wrap(self, *args, **kwargs):
# print("start", )
func(self, *args, **kwargs)
return wrap
@_decorator
def test(self, a, b, c):
print("values : ", a, b, c)
testDeco = decoClass2()
testDeco.test(1, 4, 2)
result : values : 1 4 2