在 Python 装饰器中获取类

wil*_*ill 4 python

在这段代码中:

def online_only(func, self):
    def f(*args, **kwargs):
        if self.running:
            return func(*args, **kwargs)
        else:
            return False
    return f
class VM(object):
   @property
   def running(self):
       return True
   @property
   @online_only
   def diskinfo(self):
       return True
Run Code Online (Sandbox Code Playgroud)

我希望 diskinfo 仅在 VM.running 返回 True 时运行。如何让 online_only 能够读取 self.running?

sth*_*sth 6

self被作为第一个参数传递给包装函数,所以只需要特别对待第一个参数f

def online_only(func):
    def f(self, *args, **kwargs):
        if self.running:
            return func(self, *args, **kwargs)
        else:
            return False
    return f
Run Code Online (Sandbox Code Playgroud)