gpt4 book ai didi

python - 为什么不能 pickle 作为对象属性的列表?

转载 作者:行者123 更新时间:2023-12-02 15:35:30 25 4
gpt4 key购买 nike

我正在尝试 pickle 一个自定义类的实例,这个类有一个名为“widgets”的属性,其中包含一个 widget 对象列表。当我 pickle 我的容器时,列表丢失了。不可能在一个对象中 pickle 一个列表吗?

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,结果相同。

最佳答案

widgets Container 的一个属性不是 Container实例的属性类(class)。当您 pickle 实例时,您没有 pickle 类属性,只是实例属性。因此,当您解开它时,您只会得到实例属性。

您应该阅读 python docs 中的实例与类属性

如果你也想 pickle 小部件,那么你应该使列表成为实例属性而不是类属性。这是一个例子:

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()

关于python - 为什么不能 pickle 作为对象属性的列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18361678/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com