Python 属性错误:';缓存的#u属性';对象没有属性';setter';
我正在使用functools.cached_属性来记忆一些函数 但它似乎并不支持塞特 比如说Python 属性错误:';缓存的#u属性';对象没有属性';setter';,python,Python,我正在使用functools.cached_属性来记忆一些函数 但它似乎并不支持塞特 比如说 class User @cached_property def name(self): return self._name @name.setter def name(self, val): self._name = val 但在导入时遇到了AttributeError:“cached\u property”对象没有属性“setter”@cached\u proper
class User
@cached_property
def name(self):
return self._name
@name.setter
def name(self, val):
self._name = val
但在导入时遇到了
AttributeError:“cached\u property”对象没有属性“setter”
@cached\u property是为不可变值设计的。您不能期望此装饰器模仿标准属性中的所有特性。在python文档中,您可以找到:
“缓存的\u属性()的机制与属性()有些不同。除非定义了setter,否则常规属性会阻止属性写入。相反,缓存的\u属性允许写入。”@cached\u属性是为不可变值设计的。您不能期望此装饰器模仿标准属性中的所有特性。在python文档中,您可以找到:
“缓存的\u属性()的机制与property()有些不同。除非定义了setter,否则常规属性会阻止属性写入。相反,缓存的\u属性允许写入。”我不确定您想要实现什么@cached_属性用于需要一些时间来计算但其结果从未或很少更改的函数。如果结果发生变化,您可以使用
del user.name
使缓存无效,下一次调用将重新计算结果。然而,在这个例子中,为什么不使用@property?@xjcl呢?但它确实需要更改某些用例,所以我想实现一个setter,就像@property
可以实现一样。我不确定您想要实现什么@cached_属性用于需要一些时间来计算但其结果从未或很少更改的函数。如果结果发生变化,您可以使用del user.name
使缓存无效,下一次调用将重新计算结果。然而在这个例子中,为什么不使用@property?@xjcl呢?但是它确实需要更改某些用例,所以我想实现一个setter,就像@property
可以实现的那样