Mi piacerebbe utilizzare un decoratore che accetta un argomento, controlla se tale argomento non è None e se True consente di eseguire la funzione decorata.Come passare una variabile di classe a un decoratore all'interno della definizione di classe?
Desidero utilizzare questo decoratore all'interno di una definizione di classe, perché ho un set di metodi di classe che inizia con il controllo se una variabile di classe specifica è None o no. Penso che sarebbe più bello se usassi un decoratore.
mi piacerebbe fare qualcosa di simile:
# 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
"o un' itemgetter'": o anche un [' attrgetter'] (http://docs.python.org/ 2/library/operator.html # operator.attrgetter) - di cui non ero a conoscenza dell'esistenza fino adesso. – glglgl
@glglgl: buon punto, in questo modo non dovresti aggiungere un '__getitem__'. – DSM