引数を受け入れ、その引数が None でないかどうかをチェックし、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