创建一个函数,为对象的每个属性创建 getter 和 setter,以跟踪对象的更改

问题描述

我正在尝试跟踪对象的任何属性是否已更改,以便我可以保留一堆对象“版本”,以便用户在需要时可以恢复(例如撤消\重做功能) .

为此,我想我可以为每个属性使用 getter 和 setter,并让 setter 调用一个函数来跟踪更改。由于我有 20 多个属性,因此我试图在不必编写 20 个 @property@attribute.setter 函数对的情况下实现这一点。

以下代码中的某些内容似乎很理想。但是,您不能将变量用作函数名,而且我想不出将 self 传递给内部 attrattr_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 (将#修改为@)