해쟈스토리

데코레이터 본문

파이썬/문법

데코레이터

해쟈 2024. 6. 13. 15:03
728x90
반응형

파이썬에서 함수앞에 데코레이터를 붙여 사용하는 문법으로 함수를 수정하지 않은 상태에서 추가 기능을 구현할 때 사용한다. 예를 들어 함수의 시작와 끝을 출력하거나 함수의 수행에 걸리는 시간을 출력하고 싶을 때 사용할 수 있다.

def callCount(func):
    cnt = 0

    def inner(*args, **kwargs):
        nonlocal cnt
        cnt += 1
        result = func(*args, **kwargs)
        print(f"{func.__name__}함수 실행 {cnt}회")
    return inner


@callCount
def test():
    pass

@callCount
def test1():
    pass

 

위와 같이 callCount라는 데코레이터를 만들어 붙여주면 어떤 함수든 함수명과 실행횟수를 출력해준다.

test()를 실행하면 test함수 실행 1회가 출력된다.

 

데코레이터는 여러개 지정할 수 있다. 함수 위에 데코레이터를 여러줄로 지정해 줄 수 있다. 이때 데코레이터가 실행되는 순서는 위에서 아래순이다.

@데코레이터1
@데코레이터2
def 함수이름():
    코드

 

@형태로 사용하지 않으면 아래와 같이 사용할 수 있다. 위에서는 @callCount로 데코레이터를 사용했으나 아래와 같이 

t = callCount(test)
t()

데코레이터는 함수에만 국한되지 않는다. 클래스에서도 사용이 가능하다.

 

class dbhandler_decorator(contextlib.ContextDecorator):
	def __enter__(self):
    	stop_database()
        return self
        
    def __exit__(self, ext_type, ex_value, ex_traceback):
    	start_database()
        
@dbhandler_decorator()
def offline_backup():
	run("pg_dump database")
728x90
반응형

'파이썬 > 문법' 카테고리의 다른 글

iterable 객체  (0) 2024.06.18