Tôi muốn sử dụng một trình trang trí chấp nhận một đối số, kiểm tra xem đối số đó có phải là Không, và nếu True cho phép chức năng trang trí chạy.Làm thế nào để chuyển một biến lớp tới một trình trang trí bên trong định nghĩa lớp?
Tôi muốn sử dụng trình trang trí này bên trong định nghĩa lớp, bởi vì tôi có một tập hợp các phương thức lớp bắt đầu bằng việc kiểm tra xem một biến lớp cụ thể có Không hay không. Tôi nghĩ rằng nó sẽ đẹp hơn nếu tôi sử dụng một trang trí.
Tôi muốn làm điều gì đó như thế này:
# 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
"hoặc một 'itemgetter'": hoặc thậm chí một [ 'attrgetter'] (http://docs.python.org/ 2/library/operator.html # operator.attrgetter) - sự tồn tại mà tôi không biết đến cho đến bây giờ. – glglgl
@glglgl: điểm tốt, bằng cách đó bạn sẽ không phải thêm '__getitem__'. – DSM