Python初学者问题。我试图在基于文本的游戏中使用pickle保存和加载对象,并且列表变量未按预期加载。这是我为测试问题而编写的代码:
import pickle
class my_class(object):
def __init__(self, x):
self.x = x
self.y = [1,2,3]
a = [4,5,6]
b = 8
def save(object1):
print("Game saved")
pickle_out = open("saveobject1","wb")
pickle.dump(object1, pickle_out)
pickle_out.close()
def load():
print("Loading......")
pickle_in = open("saveobject1","rb")
object1 = pickle.load(pickle_in)
return object1
object1 = my_class(10)
print ("object1.x = " + str(object1.x))
print ("object1.y = " + str(object1.y))
print ("object1.a = " + str(object1.a))
print ("object1.b = " + str(object1.b))
print ("\n")
answer = input("Would you like to save (s) or load (l)?: ")
if answer == "s":
save(object1)
object1.x = 20
object1.y[2] = 6
object1.a[2] = 12
object1.b = 16
if answer == "l":
object1 = load()
print ("object1.x = " + str(object1.x))
print ("object1.y = " + str(object1.y))
print ("object1.a = " + str(object1.a))
print ("object1.b = " + str(object1.b))
print ("\n")
列出 init 中的变量保存并加载OK(在此示例中为y)但 init 之外的列表变量不会(在此示例中为a)。但是, init 之外的非列表变量会进行保存和加载。提前感谢您的建议。
答案 0 :(得分:0)
object1.b
中的所有变量都是实例变量,因此将被保存。 <{1}}之外的列表变量和非列表变量都是类变量,因此不会保存。
但是,当您更改b
创建实例变量object1.a
而不是设置类变量时,它将被保存。但是,当您修改toolbar.add(radioButtonDDA, BorderLayout.NORTH);
toolbar.add(radioButtonPolygon, BorderLayout.NORTH);
toolbar.add(new JSeparator(1));
toolbar.add(radioButtonseedFill, BorderLayout.NORTH);
toolbar.add(radioButtonScanLine, BorderLayout.NORTH);
toolbar.add(patternCheckBox, BorderLayout.NORTH);
toolbar.add(buttonClear, BorderLayout.NORTH);
时,您不会重新分配它,只是它的一个元素,因此它仍然是一个(未保存的)类变量。
如果要保存它,请将其设为实例变量或单独保存类变量。