我发现了一个解决方案。看来问题是在dict中执行代码会阻止python弄清楚类的定义位置。解决方案是创建一个空模块,执行模块中的代码,然后将该模块添加到sys.modules中,以便python知道。
script = """
class myClass:
def __init__(self):
self.name = 'apple'
self.color = 'green'
"""
import imp, sys
moduleName = 'custom'
module = imp.new_module(moduleName)
exec script in module.__dict__
sys.modules[moduleName] = module
Now it is possible to pickle and unpickle an instance of the class:
import pickle
a = module.myClass()
s = pickle.dumps(a)
b = pickle.loads(s)