2016-05-12 50 views
2

我有一個裝飾器,我使用一些類的方法。它看起來像這樣我可以在類方法和靜態方法上使用相同的裝飾器嗎?

def api_caller(logger_name): 
    def api_caller_decorator(method): 
     @wraps(method) 
     def caller_wrapper(self, *args, **kwargs): 
      logger = log_wrap(logger_name) 
      kwargs['api'] = create_api_instance(kwargs['api']) 
      logger.info('worker authenticated') 
      return method(self, logger=logger, *args, **kwargs) 
     return caller_wrapper 
    return api_caller_decorator 

我想使用裝飾類以外,有沒有辦法做到這一點無須重新定義和手動排除self說法?

+0

是'總是logger'第二個參數? – jonrsharpe

+0

對於我想要在記錄器上使用裝飾器的情況始終需要。我做了關鍵字參數,以便可以改變順序 – LetsPlayYahtzee

+0

在這種情況下,只需忽略'args [0]'是'self'的事實,那麼它可以使用或不使用它。 – jonrsharpe

回答

0

既然你不使用self,可以將其包含在可選ARGS:

@wraps(method) 
    def caller_wrapper(*args, **kwargs): 
     ... 
     return method(logger=logger, *args, **kwargs) 
相關問題