如何解决创建一个函数,为对象的每个属性创建 getter 和 setter,以跟踪对象的更改
我正在尝试跟踪对象的任何属性是否已更改,以便我可以保留一堆对象“版本”,以便用户在需要时可以恢复(例如撤消\重做功能) .
为此,我想我可以为每个属性使用 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 举报,一经查实,本站将立刻删除。