在Python装饰器中获取类

在Python装饰器中获取类,python,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 T

在此代码中:

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
我希望diskinfo仅在VM.running返回True时运行。我怎样才能上网?我只能阅读self.running

  • def online_only(func,self)
    中不能有两个参数?它将引发TypeError,因此将其更改为
    def online\u only(func)
  • 包装函数的第一个参数是self,您可以直接使用它 e、 g


  • self
    作为第一个参数传递给包装函数,因此只需在
    f
    中特别处理第一个参数:

    def online_only(func):
        def f(self, *args, **kwargs):
            if self.running:
                return func(self, *args, **kwargs)
            else:
                return False
        return f
    
    def online_only(func):
        def f(self, *args, **kwargs):
            if self.running:
                return func(self, *args, **kwargs)
            else:
                return False
        return f