我正在对实例变量进行一些计算,完成后我想腌制类实例,这样我就不必再次进行计算了。这里有一个例子:
import cPickle as pickle
class Test(object):
def __init__(self, a, b):
self.a = a
self.b = b
self.c = None
def compute(self, x):
print 'calculating c...'
self.c = x * 2
test = Test(10, 'hello')
test.compute(6)
# I have computed c and I want to store it, so I don't have to recompute it again:
pickle.dump(test, open('test_file.pkl', 'wb'))
在test.compute(6)
我可以检查以查看是什么之后test.__dict__
:
>>> test.__dict__
{'a': 10, 'c': 12, 'b': 'hello'}
我认为这就是要腌制的东西;然而,
当我去加载类实例时:
import cPickle as pickle
from pickle_class_object import Test
t2 = pickle.load(open('test_file.pkl', 'rb'))
我在外壳中看到了这个:
calculating c...
这意味着我没有腌制c
,我正在重新计算它。
有没有办法腌制test
我想要的方式?所以我不必重新计算c
。我看到我可以 pickle test.__dict__
,但我想知道是否有更好的解决方案。此外,我对这里发生的事情的理解很弱,所以任何关于发生的事情的评论都会很棒。我已经阅读了__getstate__
and __setstate__
,但我不知道如何在这里应用它们。