これは PyROOT (ROOT) と酸洗を使用します。以下の非常に簡単な例。例として、 __setstate__ と __getstate__ を定義する、A から継承するクラス B (多くの変数を持つ) のオブジェクトをピクルする方法を使用しようとしました。
from ROOT import TLorentzVector
import cPickle as pickle
class MyVec(TLorentzVector):
def __init__(self):
TLorentzVector.__init__(self)
self.a = 'testing'
def __getstate__(self):
return self.__dict__
def __setstate__(self, state):
self.__dict__ = state
a = MyVec()
b = pickle.loads(pickle.dumps(a))
print a.__class__
print b.__class__
print a.__dict__
print b.__dict__
これは出力します
<class '__main__.MyVec'>
<class 'ROOT.TLorentzVector'>
{'a': 'testing'}
{}
オブジェクトを正しくピクルする方法はありますか? 特に、TLorentzVector から継承せず、使用しているいくつかのプロパティを自分でオーバーロードしてもかまいません。しかし、オブジェクトのプロパティが保持されないという点で、これがまったく機能しない理由はまだわかりません。