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)
プロパティデコレータは、クラスインターフェイスを変更せずに、必要に応じてコールバックを導入できるようにするための優れた方法です。ただし、3番目または4番目の変数の後では、コードが少し繰り返されます。
このパターンを次のようなものにリファクタリングする方法はありますか?
class A(object):
def __init__(self):
self.var = 0
enable_callback(self, 'var', 'var_callbacks')