我正在使用“束级”来保存属性。
class Args:pass
args = Args()
args.test = "test"
args.bla = [...]
然后我将args
作为data
传递给其他函数(data=args
)。我认为我的问题是仅提及data
:data = <__main__.Args object at 0x09E41050>
我试图使用Pickle,但是这个错误出现了:pickle.PicklingError: Can't pickle <class '__main__.Args'>: it's not found as __main__.Args
。
我不确切地知道问题是否是由引用引起的,但我认为可能是。
答案 0 :(得分:1)
解决方案在这里:Answer from Martijn on other question
我是&#34;创造&#34;我在函数中的束类。那就是问题所在。 对不起,重复,应该搜索得更好。不管怎样,谢谢!
答案 1 :(得分:1)
有什么问题?如果您使用dill
而不是pickle
,dill
可以正确识别类定义并正确地将类实例与其关联...因此可以毫无问题地腌制实例。
dude@hilbert>$ python
Python 2.7.6 (default, Nov 12 2013, 13:26:39)
[GCC 4.2.1 Compatible Apple Clang 4.1 ((tags/Apple/clang-421.11.66))] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import dill as pickle
>>> class Args: pass
...
>>> args = Args()
>>> args.test = 'test'
>>> args.bla = ['foo']
>>>
>>> _args = pickle.dumps(args)
>>> __args = pickle.loads(_args)
>>> __args
<__main__.Args instance at 0x101bf3560>
>>> __args.test
'test'
>>> __args.bla
['foo']
>>>
这适用于dill
,因为dill
可以挑选类源,而不需要通过名称引用来挑选类(如pickle
那样)。
在此处获取dill
:https://github.com/uqfoundation