我找不到在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
但是我不知道如何实现这样的装饰器。
答案 0 :(得分: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版本获得更好的实现。