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

yc0p9oo0  于 2021-08-20  发布在  Java
关注(0)|答案(0)|浏览(242)

我正在尝试跟踪对象的任何属性是否已更改,以便我可以保留对象“版本”的堆栈,以便用户在需要时可以恢复到该堆栈(如撤消\重做功能)。
为此,我想我可以对每个属性使用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所需的函数?

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题