Как я могу сохранить всю информацию о классе Python в двоичный файл? - PullRequest
0 голосов
/ 11 января 2019

Я создаю небольшое приложение-оболочку, которое поможет мне сохранить некоторую информацию и просмотреть некоторые версии Python.

У меня есть пара кодов Python для группы классов, которые ссылаются друг на друга, таких как «Пользователь», «Человек», «Контакт», «Событие», а затем основной App.py, который я использую для его тестирования.

Я использую рассол для сохранения данных, , используя этот вопрос в качестве вдохновения.

Моя проблема в том, что, хотя класс сохранен, это "внутренняя информация - нет".

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

Возврат, который я хотел бы получить, был бы равен при использовании опции 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!
>>

Как я могу это исправить?

1 Ответ

0 голосов
/ 11 января 2019

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