如何缓存可变实例属性?

问题描述 投票:0回答:1

我可以像这样缓存我的数据类的实例属性:

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
python properties memoization
1个回答
0
投票

@cached_property
主要用于应被视为不可变的属性。 文档特别指出:

对于实例的昂贵计算属性很有用,否则这些属性实际上是不可变的。

但是,它还提到您可以通过删除属性来清除缓存。所以你可以这样做:

del p.x
p._x = 5
print(p.x) # this will print 10
© www.soinside.com 2019 - 2024. All rights reserved.