【发布时间】:2016-05-03 02:56:22
【问题描述】:
pickle 引用 states that 可以腌制的对象集相当有限。确实,我有一个函数可以返回一个动态生成的类,但我发现我无法腌制该类的实例:
>>> import pickle
>>> def f():
... class A: pass
... return A
...
>>> LocalA = f()
>>> la = LocalA()
>>> with open('testing.pickle', 'wb') as f:
... pickle.dump(la, f, pickle.HIGHEST_PROTOCOL)
...
Traceback (most recent call last):
File "<stdin>", line 2, in <module>
AttributeError: Can't pickle local object 'f.<locals>.A'
这样的对象对于pickle 来说太复杂了。行。现在,神奇的是,如果我尝试腌制一个类似的对象,但它是派生类的,它可以工作!
>>> class DerivedA(LocalA): pass
...
>>> da = DerivedA()
>>> with open('testing.pickle', 'wb') as f:
... pickle.dump(da, f, pickle.HIGHEST_PROTOCOL)
...
>>>
这里发生了什么?如果这很容易,为什么pickle 不使用此解决方法来实现允许“本地对象”被腌制的dump 方法?
【问题讨论】:
标签: python python-3.x nested pickle