type()
最終的にピクルされるクラスを動的に生成するために使用しています。問題は、ピクルされたオブジェクトを再構築するために、アンピクル プロセスがクラスの定義を必要とすることです。
これは私が立ち往生しているところです。動的に生成されたクラスからインスタンスを生成する方法を unpickler に提供する方法がわかりません。
ヒントをいただければ幸いです。
ありがとう!
問題の例を次に示します。
>>> class Foo(object):
... pass
>>> g=type('Goo',(Foo,),{'run':lambda self,x: 2*x } )()
>>> cPickle.dumps(g)
PicklingError: Can't pickle <class '__main__.Goo'>: attribute lookup __main__.Goo failed
これは明らかに機能しますが、ピクル可能な基本クラスから作成された動的クラスからのみ (検索可能なモジュール定義を使用):
import cPickle
class Foo(object): pass
def dynamic(): return type('Goo',(Foo,),{'run':lambda self,x: 2*x } )()
g=type('Goo',(Foo,),{'run':lambda self,x: 2*x , '__reduce__': lambda self: (dynamic,tuple()) } )()
gg=cPickle.loads ( cPickle.dumps(g) )
print gg.run(10)