-
카테고리
-
세부 분야
프로그래밍 언어
-
해결 여부
미해결
질문입니다
20.11.17 21:18 작성 조회수 121
1
데코레이터의 로직이 함수의 어떤부분에 들어가는지 궁금합니다
답변을 작성해보세요.
1
남박사
지식공유자2020.11.18
파이썬 데코레이터는 단순히 데코레이터의 로직이 함수 어느 부분에 위치해서 실행되는 단순한 동작방식은 아닙니다. 사람이 이해하기에 그렇게 쉽게 이해할 수 있게 설계되어있을뿐 실제 동작하는 방식은 그보다 훨씬 복잡합니다.
위와 같이 데코레이터 함수를 정의하고 이를 t 라는 변수에 할당하여 dir(t) 를 출력해보면
위외 이미지에서 처럼 t 의 내부 함수들을 확인해 볼 수 있습니다. 여기서 __closure__ 라는 애가 실제 중요한 역할을 하는데 이 클로저가 어떻게 동작하는지 그리고 클로저와 데코레이터는 무슨 차이가 있는지 공부를 해보시면 좀 더 도움이 되지 않을까 생각됩니다.
print(dir(t.__closure__[0]) 을 출력해서 __closure__ 의 구성을 살펴보면 위 이미지 처럼 클로저가 어떻게 구성이 되어있는지 확인할 수 있고 cell_contents 라는 변수에 우리가 할당한 함수명이 임시 보관되어있는 것도 확인해볼 수 있습니다. 이를 보아 데코레이터에 정의한 함수가 수행되고 이렇게 인자로 넘어온 함수명을 cell_contents 에 보관하였다가 실행되어야 하는 순간에 이를 호출하고 리턴하는 방식으로 동작할거라 대강 유추가 가능합니다.
물론 더 정확하게 알기 위해선 실제 소스코드를 보고 분석해보는 방법이 가장 좋습니다.
답변 1