【发布时间】:2019-09-01 22:27:22
【问题描述】:
我找不到在 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
但我不知道如何实现这样的装饰器。
【问题讨论】:
-
不清楚你的目标是什么。 1.
property.setter不是普通函数,而是描述符类的方法。描述符是一些特殊的装饰器。 2. 你现在如何使用property似乎完全没有必要。 3. 如果您想跟踪任何属性的更改,也许您应该查看__setattr__方法。
标签: python python-3.x decorator python-decorators