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")
列出内的变量 初始化 保存并加载OK(本例中为y),但在外部列出变量 初始化 不要(本例中为a)。但是,外部的非列表变量 初始化 保存并加载。提前感谢您的建议。
内的所有变量 __init__ 是实例变量,因此将被保存。外部的列表和非列表变量 __初始化__ 是类变量,因此不会保存。
__init__
__初始化__
然而,当你改变 object1.b 创建实例变量 b 而不是设置类变量,因此它将被保存。但是,当您修改 object1.a ,您没有重新分配它,只是它的一个元素,因此它仍然是一个(未保存的)类变量。
object1.b
b
object1.a
如果要保存它,请将其设置为实例变量或单独保存类变量。