我正在尝试跟踪对象的任何属性是否已更改,以便我可以保留对象“版本”的堆栈,以便用户在需要时可以恢复到该堆栈(如撤消\重做功能)。
为此,我想我可以对每个属性使用getter和setter,并让setter调用一个跟踪更改的函数。因为我有20多个属性,所以我想不必写20个就可以做到这一点 @property
, @attribute.setter
函数对。
下面的代码似乎很理想。但是,您不能使用变量作为函数名,我也找不到传递函数名的好方法 self
内心深处 attr
及 attr_setter
功能。
class MyClass:
def __init__(self, start, end):
self._start = start
self._end = end
self.create_getset()
def create_getset(self):
for attr in self.__dict__:
attr = attr[1:]
@property
def attr(self):
print(f'{attr} getter is called')
return self._attr
@attr.setter
def attr_setter(self, value):
setattr(self, attr, value)
# function to keep track of changes
鉴于此,有些问题:
(1) 这是向所有属性添加getter和setter的好方法吗?有更好的办法吗?
(2) 这是跟踪属性更改的合理好方法吗?
如果是(1)和(2),那么我如何使它工作?如何使用属性名作为变量来创建添加getter和setter所需的函数?
暂无答案!
目前还没有任何答案,快来回答吧!