微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决创建一个函数,为对象的每个属性创建 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 举报,一经查实,本站将立刻删除。