假设我有一节课:
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
Run Code Online (Sandbox Code Playgroud)
为了得到一些强烈的计算,所以我将它缓存在内存中以加快速度.
但是,当我挑选其中一个类时,我不想cachedBar被腌制.
我可以将cachedBar标记为volatile/transient/not picklable吗?
lvc*_*lvc 23
根据Pickle文档,您可以提供一个名为的方法__getstate__(),该方法返回表示您想要进行pickle的状态(如果未提供,则pickle使用thing.__dict__).所以,你可以这样做:
class Thing:
def __getstate__(self):
state = dict(self.__dict__)
del state['cachedBar']
return state
Run Code Online (Sandbox Code Playgroud)
这不一定是dict,但如果它是其他东西,你还需要实现__setstate__(state).