我怎样才能拯救"一个实例,而不是它的参考? (泡菜)

时间:2014-05-15 08:03:48

标签: python instance pickle

我正在使用“束级”来保存属性。

class Args:pass
args = Args()
args.test = "test"
args.bla = [...]

然后我将args作为data传递给其他函数(data=args)。我认为我的问题是仅提及datadata = <__main__.Args object at 0x09E41050>

我试图使用Pickle,但是这个错误出现了:pickle.PicklingError: Can't pickle <class '__main__.Args'>: it's not found as __main__.Args

我不确切地知道问题是否是由引用引起的,但我认为可能是。

2 个答案:

答案 0 :(得分:1)

解决方案在这里:Answer from Martijn on other question

我是&#34;创造&#34;我在函数中的束类。那就是问题所在。 对不起,重复,应该搜索得更好。不管怎样,谢谢!

答案 1 :(得分:1)

有什么问题?如果您使用dill而不是pickledill可以正确识别类定义并正确地将类实例与其关联...因此可以毫无问题地腌制实例。

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那样)。

在此处获取dillhttps://github.com/uqfoundation