假设我有一个班级:
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标记为volatile / transient / not picklable吗?
答案 0 :(得分:21)
根据Pickle documentation,您可以提供一种名为__getstate__()
的方法,该方法会返回代表您想要腌制的州的内容(如果没有提供,pickle
使用thing.__dict__
)。所以,你可以这样做:
class Thing:
def __getstate__(self):
state = dict(self.__dict__)
del state['cachedBar']
return state
这不一定是dict,但如果是别的,你还需要实现__setstate__(state)
。
答案 1 :(得分:3)
实施__getstate__
仅返回要被腌制的对象的哪些部分