【发布时间】:2020-08-24 03:17:38
【问题描述】:
我正在根据@property 的想法开发一个描述符。我想了解是否有任何方法可以轻松地将属性的行为扩展到设置/获取之外。
具体示例:我正在与设备通信,并希望有一个可以设置/获取/更新的属性。这样,当我set时,我将新值传递给设备,并将其存储在缓存中。当我get 时,我检索缓存的值。当我update 时,设备被重新询问该值。这样,可以避免与设备进行不必要的通信,除非明确触发。
我不知道是否有我遗漏的模式可能是一个简单的解决方案。一个选项是在set 中使用特殊值时使缓存无效,但我认为假设触发更新的特定值不是一个好主意。
【问题讨论】:
-
我的意思是,你的
get函数本质上会包含这种逻辑。这是一个例子:github.com/pyglet/pyglet/blob/… 非常依赖于此。您的set可以检查值/键是否已存在并采取相应措施。 -
看起来不像我要找的东西。我看不到他们在获取时如何实施更新,他们在设置时正在更新。我会扩展我的问题。
-
即使有一种方法可以像您描述的那样扩展属性功能,使用该附加功能的语法是什么样的?假设
a是类A的一个属性,那么b = A.a调用a.getter,而A.a = b调用a.setter。您建议调用“updater”的语法是什么? -
这就是我要问的,有没有办法?例如,
del触发一个特殊的方法。也许有一个upd。或者也许描述符不是要走的路,还有另一种我不知道的方法。或者也许有办法知道get是否被额外的.update访问? -
对不起,我不明白您的
getter和updater之间的区别。如果你想让你的updater有自己的语法,你需要定义一个新的操作符。
标签: python caching properties descriptor