我可以像这样缓存我的数据类的实例属性:
from dataclasses import dataclass
from functools import cached_property
@dataclass
class Point:
_x: float
@cached_property
def x(self):
return self._x * 2
>> p = Point(3)
>> p.x
6
但是
@cached_property
假设 x
永远不会改变。如果属性是可变的,我该如何缓存它,所以我可以这样做:
>> p.x += 1
>> p.x
7
@cached_property
主要用于应被视为不可变的属性。 文档特别指出:
对于实例的昂贵计算属性很有用,否则这些属性实际上是不可变的。
但是,它还提到您可以通过删除属性来清除缓存。所以你可以这样做:
del p.x
p._x = 5
print(p.x) # this will print 10