본문 바로가기

데코레이터라고 막 쓰고 있는데,

함수 호출 이전에 호출되는 함수 정도로 알고 있었는데, 호출되는 함수 전체를 싸고 있는 함수구나

 

왜 쓰는지?

 

1. 즉 이미 구현한 함수를 고치거나 수정하지 않고 그 함수 앞 뒤로 어떤 조건이나 리턴을 수정하려면 데코레이터 함수를 만들어서 쓰도록 하자.

2. 중복되는 형태의 함수가 아주 많이 있다면, 데코레이터로 정의해서 코드 양을 줄일 수 있겠다.

예를 들면 try, except 구문이 거의 동일한 API 함수들이 아주 많다면 데코레이터로 정의해서 만들도록 하자.

 

아래분의 글을 보는게 나을 듯 하고, 난 의미만 알면되지.

http://schoolofweb.net/blog/posts/%ED%8C%8C%EC%9D%B4%EC%8D%AC-%EB%8D%B0%EC%BD%94%EB%A0%88%EC%9D%B4%ED%84%B0-decorator/

 

SchoolofWeb :: 파이썬 - 데코레이터 (Decorator)

파이썬 데코레이터 (Decorator)강좌

schoolofweb.net

아래 코드에서 보면, @함수 형태로 불리는 것이 데코레이터 함수이다.

 

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/

 

[파이썬] 데코레이터 기본 사용법

Engineering Blog by Dale Seo

www.daleseo.com

>>> 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/

 

[Python 문법] 데코레이터 (Decorator)

Pyton으로 데코레이터를 만들고 사용하는 방법에 대해 알아본다.

nachwon.github.io

 

만드는 방법은?

2가지 방법으로 만들 수 있다는 것

1. 그냥 함수로 만들어도 되고

2. 클래스로 만들어도 되고 <-- 추가적인 인자나 기능을 다양하게 넣으려면 클래스로 만드는게 좋지 않을까?

 

자세한 만드는 방법도 위의 글을 참고합시다. 열심히 쓰신 분을 생각해서 원저작자 글을 보는게 좋을 듯

 

BJ.

에잇 흥이다!! 토라지는 것들

J U N E 님의 사진, 출처: Pexels

B로그0간

개발 관련 글과 유용한 정보를 공유하는 공간입니다.