2016-05-12 4 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を使用していないので:

@wraps(method) 
    def caller_wrapper(*args, **kwargs): 
     ... 
     return method(logger=logger, *args, **kwargs) 
関連する問題