簡體   English   中英

在Python裝飾器中獲取類

[英]Get class in Python decorator

在這段代碼中:

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時運行。 如何才能通過online_only閱讀self.running?

self作為第一個參數傳遞給包裝函數,所以只需要在f處理第一個參數:

def online_only(func):
    def f(self, *args, **kwargs):
        if self.running:
            return func(self, *args, **kwargs)
        else:
            return False
    return f
  1. 你不能在def online_only(func, self)有兩個參數? 它會引發TypeError,因此將其更改為def online_only(func)
  2. 包裝函數的第一個參數是self,你可以使用它,例如

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM