fun*_*oid 0 python pickle python-2.7
我试图挑选一个自定义类的实例,这个类有一个名为"widgets"的属性,它包含一个widget对象列表.当我腌制我的容器时,列表就丢失了.是不是可以在对象中挑选一个列表?
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()
Run Code Online (Sandbox Code Playgroud)
后来我试着破坏...
# 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 []
Run Code Online (Sandbox Code Playgroud)
我尝试了pickle和cPickle同样的结果.
widgets是的一个属性类 Container没有的属性实例中的Container类.当你腌制实例时,你没有腌制类属性,只有实例属性.因此,当你取消它时,你只会得到实例属性.
您应该阅读python文档中的实例与类属性
如果你想挑选小部件,那么你应该使列表成为实例属性而不是类属性.这是一个例子:
import pickle
filename = 'container.pkl'
class Container(object):
def __init__(self, name):
self.name = name
self.widgets = []
class Widget(object):
def __init__(self, name):
self.name = name
c = Container('My Container')
w = Widget('My Widget')
c.widgets.append(w)
data = open(filename, 'wb')
pickle.dump(c, data)
data.close()
Run Code Online (Sandbox Code Playgroud)