如何将 python class 的所有信息保存为二进制?

How can I save all information of a python class to binary?

我正在创建一个 shell 小应用程序来帮助我保存一些信息并查看一些 python。

我有一些 python 代码用于一堆 class 相互引用的 es,例如 User、Person、Contact、Event,然后是主要的 App.py我用来测试它的。

我正在使用 pickle 来保存数据,using this question as inspiration.

我的问题是,虽然 class 已保存,但它是 "internal information isn't"。

import Event
import Contact
import pickle
def saveObj(filename, obj):
    with open(filename, 'wb') as output:
    pickle.dump(obj,output, pickle.HIGHEST_PROTOCOL)
    print("SAVED")

def loadObj(filename, obj):
    with open(filename, 'rb') as input:
    obj = pickle.load(input)
    print("LOADED")

p1 = Person.Person("abcd",12,"ui")
p2 = Person.Person("Hah",123,"aaa")
c1 = Contact.Contact([p1,p2], "Wakanda", "12-23-54")
e1 = Event.Event([p1],"12-32-31")
e1.setTitle();
e1.setDescription();

c2 = Contact.Contact([p2],"Forever", "12-23-53")


print("1 for new user, 2 for existing user")
ipt = input("Write something but not exit!\n>>")
filename = ""
while (ipt!= "exit!"):
    if (ipt=="1"):
        print("1")
        idNumber = input("Insert id\n>> ")
        name = input("Inser name\n>> ")
        filename = str(idNumber)+".data"
        session = LoggedIn.User(idNumber,name)
        session.addStuff([e1],[c1,c2],[p1,p2])
        print(session.people)
        saveObj(filename,session)
        del session
    elif(ipt=="2"):
        print("2")
        session = LoggedIn.User(None,None)    
        loadObj(filename,session)
        print(session.people)
    ipt = input("Write something but not exit!\n>>")

我想要的 return 等于当我使用选项 1 和选项 2 时。但它是这样的:

1 for new user, 2 for existing user
Write something but not exit!
>>1
1
Insert id
>> 12345678
Inser name
>> AAA
[<Person.Person object at 0x7fa8079c6908>, <Person.Person object at 0x7fa8079c6940>]
SAVED
Write something but not exit!
>>2
2
LOADED
[]
Write something but not exit!
>>

我该如何解决这个问题?

obj = pickle.load(input) 不会更改您通过 obj 参数传入的对象的值。尝试使用 return.

def loadObj(filename):
    with open(filename, 'rb') as input:
        obj = pickle.load(input)
    print("LOADED")
    return obj

#later...

print("2")
session = loadObj(filename)
print(session.people)