2016-05-12 1 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]' is 'self', тогда он будет работать с ним или без него. – jonrsharpe

ответ

0

Поскольку вы не используете self, вы можете включить его в необязательных аргументах:

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