0

これは 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 から継承せず、使用しているいくつかのプロパティを自分でオーバーロードしてもかまいません。しかし、オブジェクトのプロパティが保持されないという点で、これがまったく機能しない理由はまだわかりません。

4

1 に答える 1