我可以将变量标记为瞬态以防止它们被序列化吗?
假设我有一个类:
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 标记为不需要保存吗?
2 个回答
3
实现 __getstate__
方法,用来返回一个对象中哪些部分需要被保存(也就是“打包”)
26
根据Pickle的文档,你可以提供一个叫做__getstate__()
的方法,这个方法会返回一个表示你想要保存状态的东西(如果你不提供这个方法,pickle
会使用thing.__dict__
)。所以,你可以这样做:
class Thing:
def __getstate__(self):
state = dict(self.__dict__)
del state['cachedBar']
return state
这个返回的东西不一定非得是字典,但如果你返回的是其他类型的东西,你还需要实现一个叫__setstate__(state)
的方法。