Python 코드를 보다 보면 함수앞에 @ 붙은 문장이 보입니다.
@Decorator는 기존에 존재하는 function의 기능을 조작하여 새로운 function을 만들 수 있는 기능입니다. 함수를 한번 더 wrapping 할 수 있습니다.
A 라는 함수가 있고 이것을 조작해서 A' 함수를 만들 수 있습니다.
예를 들어보겠습니다. 이런 함수가 있고 kiwoom_CommConnect() 함수 실행한다면, @SyncRequestDecorator.kiwoom_sync_request 여기 문장에 의해
@SyncRequestDecorator.kiwoom_sync_request def kiwoom_CommConnect(self, **kwargs): lRet = self.dynamicCall("CommConnect()") return lRet
SyncRequestDecorator.kiwoom_sync_request 여기로 진입하여 return func_wrapper 여기를 실행하게되고 func(self, *args, **kwargs)에 의해서kiwoom_CommConnect 함수가 실행되게 됩니다. 기존과 동일하다고 생각 할수 있지만 추가로 아래와 같은 코드가 실행되게 됩니다.
self.event = QEventLoop() self.event.exec_()
class SyncRequestDecorator:
@staticmethod def kiwoom_sync_request(func): def func_wrapper(self, *args, **kwargs): if kwargs.get('nPrevNext', 0) == 0: self.params = {} self.result = {} func(self, *args, **kwargs) self.event = QEventLoop() self.event.exec_() return self.result # 콜백 결과 반환 return func_wrapper
뭔가 복잡하지만 이렇게 사용하는 이유는 코드의 중복을 피하기 위해서 이런식으로 많이 사용합니다.
댓글 없음:
댓글 쓰기