【发布时间】:2013-08-21 15:32:49
【问题描述】:
我正在尝试腌制一个自定义类的实例,这个类有一个名为“widgets”的属性,其中包含一个小部件对象列表。当我腌制容器时,列表丢失了。不能在对象中腌制列表吗?
import pickle
filename = 'container.pkl'
class Container(object):
widgets = []
class Widget(object):
pass
c = Container()
c.name = "My Container"
w = Widget()
w.name = "My Widget"
c.widgets.append(w)
data = open(filename, 'wb')
pickle.dump(c, data)
data.close()
稍后我尝试解开......
# assume I have imported the classes and filename here
data = open(filename, 'rb')
container = pickle.load(data)
data.close()
print container.name # shows the pickled name
print container.widgets # shows []
我尝试过 pickle 和 cPickle,结果相同。
【问题讨论】:
-
我无法重现此问题 - 使用您的代码,使用 python 2.7.5,
print container.widgets打印[<__main__.Widget object at 0x1004c2350>]。您能否尝试仅运行上面的代码,看看是否有同样的问题?也许您未显示的代码中的某些内容导致了问题。 -
我可以重现 python 2.7.5 的问题。
-
Brionius,这几乎是确切的代码,它包含在一个文件中,我注释/取消注释酸洗和解酸。如果我一次运行它并在同一个脚本中腌制/取消腌制,它确实有效,但我不确定为什么会这样。
标签: python python-2.7 pickle