在Python类中访问装饰器函数内的self

Yar*_*rin 2 python scope decorator

我有一个装饰器函数,我正在应用于类中的函数.装饰者应该对_api成员变量进行检查.但是,global name 'self' is not defined当我尝试这样做时,我收到一个错误.什么是正确的方法?

def requires_api(fn):
    def wrapped(*args, **kwargs):
        if self._api is not None:
            return fn(*args, **kwargs)
        else:
            return None
    return wrapped


@requires_api       
def do_something(self):
...
Run Code Online (Sandbox Code Playgroud)

kin*_*all 5

您的实例的引用位于您的包装函数中,*args因此名称self不可用.使用args[0],或者只是将其重写为:

def wrapper(self, *args, **kwargs):
    # ...
Run Code Online (Sandbox Code Playgroud)

当然,如果你这样做,你对包装函数的调用也应该包括self.