반응형

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

+ Recent posts