Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 属性错误:';缓存的#u属性';对象没有属性';setter';_Python - Fatal编程技术网

Python 属性错误:';缓存的#u属性';对象没有属性';setter';

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

我正在使用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 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
可以实现的那样