我可以在 class 方法和静态方法上使用相同的装饰器吗?

Can I use the same decorator on a class method and on a static method?

我有一个用于某些 class 方法的装饰器。看起来像这样

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

我想在 class 之外使用那个装饰器,有没有办法在不重新定义和手动排除 self 参数的情况下做到这一点?

由于您没有使用 self,您可以将其包含在可选参数中:

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