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)
您的实例的引用位于您的包装函数中,*args因此名称self不可用.使用args[0],或者只是将其重写为:
def wrapper(self, *args, **kwargs):
# ...
Run Code Online (Sandbox Code Playgroud)
当然,如果你这样做,你对包装函数的调用也应该包括self.