python中pickle模块无法导入_Python:无法pickle模块对象
根据文件:What can be pickled and unpickled?The following types can be pickled:None, True, and Falseintegers, floating point numbers, complex numbersstrings, bytes, bytearraystuples, lists, sets, and dicti
根据文件:What can be pickled and unpickled?
The following types can be pickled:None, True, and False
integers, floating point numbers, complex numbers
strings, bytes, bytearrays
tuples, lists, sets, and dictionaries containing only picklable objects
functions defined at the top level of a module (using def, not lambda)
built-in functions defined at the top level of a module
classes that are defined at the top level of a module
instances of such classes whose __dict__ or the result of calling __getstate__() is picklable (see section Pickling Class Instances for details).
如您所见,模块不在列表中。注意,这在使用deepcopy时也是正确的,而且不仅适用于pickle模块,如deepcopy文档中所述:This module does not copy types like module, method, stack trace, stack frame, file, socket, window, array, or any similar types. It does “copy” functions and classes (shallow and deeply), by returning the original object unchanged; this is compatible with the way these are treated by the pickle module.
可能的解决方法是使用@property装饰器而不是属性。
例如,这应该有效:import numpy as np
import pickle
class Foo():
@property
def module():
return np
foo = Foo()
with open('test.out', 'wb') as f:
pickle.dump(foo, f)
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)