在类[duplicate]中装饰@ property.setter装饰器

问题描述 投票:1回答:1

我找不到在Python类中装饰@ property.setter装饰器的正确方法。

为了避免复制粘贴代码,我决定在项目的“设置”模块中修饰@ property.setter函数。所以“设置”模块,具有自动保存新添加/更改设置的能力。

问题是要启用自动保存功能,我必须设置一个标志:

self.changed = True

每次修改设置。

但是,我不认为在每个@ property.setter中添加该标志是个好主意,因为在执行保存之前我可能需要执行更多逻辑,在这种情况下我将不得不粘贴此我已经拥有的每个@ property.setter的逻辑(这不是高效的imo)。

我想要的是取代:

    @baud_rate.setter
    def baud_rate(self, value):
        self.changed = True
        self._baud_rate = value

有:

    @setting_decorator
    @baud_rate.setter
    def baud_rate(self, value):
        self._baud_rate = value

但我不知道如何实现这样的装饰器。

python python-3.x decorator python-decorators
1个回答
0
投票

我认为描述符就是你所需要的。看这个例子:

class Settings:
    def __init__(self, name):
        self.name = name

    def __get__(self, instance, owner):
        return instance.__dict__[self.name]

    def __set__(self, instance, value):
        instance.__dict__['changed'] = True
        instance.__dict__[self.name] = value


class YourSetting:

    baud_rate = Settings('baud_rate')
    def __init__(self, baud_rate):
        self.baud_rate = baud_rate

有关更多信息,请查看doc,因为根据您的python版本,您可以获得更好的实现。

© www.soinside.com 2019 - 2024. All rights reserved.