2016-05-12 48 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) 
相关问题