Get class in Python decorator

后端 未结 2 1863
广开言路
广开言路 2020-12-17 04:54

In this code:

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


        
相关标签:
2条回答
  • 2020-12-17 05:10
    1. You can not have two arguments in def online_only(func, self) ? it will raise TypeError, so change it to def online_only(func)
    2. The first argument to wrapped function would be self, you can just use that e.g.

    def online_only(func):
        def f(self):
            if self.running:
                return func(self)
            else:
                return False
        return f
    
    class VM(object):
        @property
        def running(self):
            return True
    
        @property
        @online_only
        def diskinfo(self):
            return True
    
    print VM().diskinfo
    
    0 讨论(0)
  • 2020-12-17 05:30

    self is passed as the first parameter to the wrapping function, so just treat the first parameter specially in f:

    def online_only(func):
        def f(self, *args, **kwargs):
            if self.running:
                return func(self, *args, **kwargs)
            else:
                return False
        return f
    
    0 讨论(0)
提交回复
热议问题