У меня есть экземпляр класса (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