からのオブジェクトを永続的に保持したいreverend.thomas.Bayes
。もちろん、これらのクラスの1つを直接漬け込もうとすると、次のようになります。
TypeError: can't pickle instancemethod objects
これを回避するために、私は2つの関数を宣言しようとしました。
import types
from itertools import chain
from copy import copy
from reverend.thomas import Bayes
def prepare_bayes_for_pickle(bayes_obj):
dic = copy(bayes_obj.__dict__) #I also tried using deepcopy instead of copy
for k in dic:
if type(k) == types.MethodType:
dic.pop(k)
return dic
def reconstruct_bayes_from_pickle(bayes_dic):
b = Bayes()
# Merge b with bayes_dic, with bayes_dic taking precedence
dic = dict(chain(bayes_dic, b))
b.__dict__ = dic
return b
基本的に、私はオブジェクトのをコピーしてみて、タイプをに対してテストしてs__dict__
を削除しようとします。instancemethod
types.MethodType
次に、新しいオブジェクトを作成し、それを(UnPickledの後で)Bayes
一緒にマージして、オブジェクトを再構築します。bayes_dic
prepare_bayes_for_pickle
しかし、元のエラーを取得せずに返されたオブジェクトをまだピクルス化できないため、2番目のメソッドにはまだ到達していません。