インスタンス変数でいくつかの計算を行っています。その後、計算を再度行う必要がないように、クラス インスタンスをピクルしたいと考えています。ここに例があります:
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
だから、計算をやり直す必要はありません。ピクルするだけでよいことがわかりtest.__dict__
ましたが、より良い解決策があるかどうか疑問に思っています。また、ここで何が起こっているのかについての私の理解は弱いので、何が起こっているのかについてのコメントは素晴らしいことです. __getstate__
とについて読みまし__setstate__
たが、ここで適用する方法がわかりません。