5
我想使用接受參數的裝飾器,檢查該參數是否爲無,如果爲True,則允許裝飾的函數運行。如何將類變量傳遞給類定義內的裝飾器?
我想在類定義中使用這個裝飾器,因爲我有一組類方法,它首先檢查特定類變量是否爲None。我認爲如果我使用裝飾器,它會更好看。
我想要做這樣的事情:
# decorator
def variable_tester(arg):
def wrap(f):
def wrapped_f(*args):
if arg is not None:
f(*args)
else:
pass
return wrapped_f
return wrap
# class definition
class my_class(object):
def __init__(self):
self.var = None
@variable_tester(self.var) # This is wrong. How to pass self.var to decorator?
def printout(self):
print self.var
def setvar(self, v):
self.var = v
# testing code
my_instance = my_class()
my_instance.printout() # It should print nothing
my_instance.setvar('foobar')
my_instance.printout() # It should print foobar
「或'itemgetter'」:甚至是一個['attrgetter'](http://docs.python.org/ 2/library/operator.html#operator.attrgetter) - 直到現在我還不知道它的存在。 – glglgl
@glglgl:好點,這樣你就不必添加'__getitem__'。 – DSM