我正在尝试实现从数据库返回的值的缓存:
class Foo
...
def getTag(self):
value = self._Db.get(self._f[F_TAG])
setattr(self, 'tag', value)
return value
def _setTag(self, tag):
self._Db.set(self._f[F_TAG], tag)
tag = property(getTag)
...
x = Foo()
x._setTag("20")
print(x.tag)
x._setTag("40")
print(x.tag)
当我第一次处理标记属性时,它必须从数据库中获取值,并用实例字段重写类字段标记,以便以后使用,但出现错误:
^{pr2}$
不幸的是,不可能重写
@property
。这是因为@property
附加到类,而不是实例。在您可以使
@property
getter稍微复杂一点:或者创建一个描述符来为您进行缓存:
^{pr2}$您的
x.tag
是一个属性,没有setter,因此当您尝试设置它时,您会收到一个错误,原因很明显。因此,将实际值存储在一个“private”字段中,比如x._tag
,并为其编写一个getter和setter。在相关问题 更多 >
编程相关推荐