问题描述
我正在尝试跟踪对象的任何属性是否已更改,以便我可以保留一堆对象“版本”,以便用户在需要时可以恢复(例如撤消\重做功能) .
为此,我想我可以为每个属性使用 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 所需的函数?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)