Различия в сериализации маринованные и укропные с отредактированными методами класса - PullRequest
0 голосов
/ 09 октября 2018

У меня есть экземпляр класса (Bar), который я модифицирую методом "на лету".после этого я экспортирую экземпляр для загрузки в какой-то другой модуль.Я пробовал с соленьями и укропом, и я заметил некоторые важные различия.Кто-нибудь знает почему, отредактированный метод работает с dill, но не с pickle?возможно ли иметь подобное поведение с pickle, как у меня с dill?

import types 
import Bar
import pickle 
import dill

def mymethod():
    #some patch over the original method
    return method(param=value)

obj = Bar()
#patch method on instance
obj.method = types.MethodType(mymethod, obj)

obj.method(data) # works !

# pickle
with open('obj.pkl', 'wb') as obj_file:
    pickle.dump(obj, obj_file)

objp = pickle.load( open( './obj.pkl','rb') )
objp.method(data) # DONT WORK ! (calls the Bar.method implementation)


# dill
with open('obj.dl', 'wb') as obj_file:
    dill.dump(obj, obj_file)

objd = pickle.load( open( './obj.dl','rb') )
objd.method(data) # it works
...