我刚刚开始掌握 Python 中的装饰器,并使用以下简单模式使用它们向某些实例变量添加回调:
class A(object):
def __init__(self):
self._var = 0
self.var_callbacks = []
@property
def var(self):
return self._var
@var.setter
def var(self, x):
self._var = x
for f in self.var_callbacks:
f(x)
属性装饰器是一种简洁的方式,它允许我在必要时引入回调而不更改类接口。但是,在第三个或第四个变量之后,它使代码有点重复。
有没有办法将此模式重构为以下内容:
class A(object):
def __init__(self):
self.var = 0
enable_callback(self, 'var', 'var_callbacks')