首页 > 解决方案 > 创建一个函数,为对象的每个属性创建 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 所需的函数?

标签: pythongetter-setter

解决方案


推荐阅读