我可以将变量标记为临时变量,以免被腌制吗?
假设我有一堂课:
class Thing(object):
cachedBar = None
def __init__(self, foo):
self.foo = foo
def bar(self):
if not self.cachedBar:
self.cachedBar = doSomeIntenseCalculation()
return self.cachedBar
为了进行一些密集的计算,因此我将其缓存在内存中以加快处理速度。
但是,当我腌制这些类之一时,我不想cachedBar
被腌制。
我可以将cachedBar标记为易失性/瞬态/不可腌制吗?
-
根据Pickle文档,您可以提供一个名为的方法
__getstate__()
,该方法返回代表您想要腌制的状态的东西(如果未提供,则pickle
使用thing.__dict__
)。因此,您可以执行以下操作:class Thing: def __getstate__(self): state = dict(self.__dict__) del state['cachedBar'] return state
这不一定是一个命令,但是如果还有其他要求,则还需要实现
__setstate__(state)
。