
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 ログイン