パスワードを忘れた? アカウント作成
12521703 journal
日記

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 しなければならない。

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
typodupeerror

コンピュータは旧約聖書の神に似ている、規則は多く、慈悲は無い -- Joseph Campbell

読み込み中...