代码之家  ›  专栏  ›  技术社区  ›  Lang0n

泡菜未保存(或加载?)对象列表变量在\uu init之外__

  •  0
  • Lang0n  · 技术社区  · 7 年前

    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)。但是,外部的非列表变量 初始化 保存并加载。提前感谢您的建议。

    1 回复  |  直到 7 年前
        1
  •  0
  •   internet_user    7 年前

    内的所有变量 __init__ 是实例变量,因此将被保存。外部的列表和非列表变量 __初始化__ 是类变量,因此不会保存。

    然而,当你改变 object1.b 创建实例变量 b 而不是设置类变量,因此它将被保存。但是,当您修改 object1.a ,您没有重新分配它,只是它的一个元素,因此它仍然是一个(未保存的)类变量。

    如果要保存它,请将其设置为实例变量或单独保存类变量。