jordan_bethの日記: python pickle の制限事項
日記 by 
			jordan_beth
	
	
    自作のクラスを pickle 化しようとしてハマる。
pickle でシリアライズできるのは、ドキュメントによれば
        None 、 True 、および False
        整数、長整数、浮動小数点数、複素数
        通常文字列および Unicode 文字列
        pickle 化可能なオブジェクトからなるタプル、リスト、集合および辞書
        モジュールのトップレベルで定義されている関数
        モジュールのトップレベルで定義されている組込み関数
        モジュールのトップレベルで定義されているクラス
ということ。
なので
class Test(object) :
        pass
pickle.dumps(Test())
は可能だが、
def class_factory() :
        class NewTest(object) :
                pass
        reutrn NewTest
nclass = class_factory()
pickle.dumps(nclass())
はエラーが出る。
ということで、モジュールトップの名前空間で定義されていないクラスのインスタンスは、一旦リストや辞書などに変換してから dump しなければならない。
python pickle の制限事項 More ログイン