LINUX.ORG.RU

[python]Сериализация вложенного класса

 


0

0

Пытаюсь решить такую проблему, есть класс, по ходу своей работы он собирает данные, их нужно сохранить, потом продолжить работу и выполнить некоторые действия, и затем загрузить сохраненные данные и тд. Чтобы удобнее было сохранять, я делаю отдельных класс для хранения. В примере я сохраняю данны, потом присваиваю им новое значение, а потом загружаю. Но значение у не меняется после загрузки, оно остается тем же что и при присвоении. Как можно сделать так чтобы при загрузке присваивались те значения которые были сохранены?

import io 
import pickle

class b (object):
    y=0

class a (object):
    x=1
    B=b
    
x=a
x.B.y=5    

print(x.B.y,'init')
f=io.open('test','wb')
pickle.dump(x.B,f)

f.close()
print(x.B.y,'after dump')

x.B.y=99 #########меняю значение

f=io.open('test','rb')
x.B=pickle.load(f)#########при загрузке оно не менятся
print(x.B.y,'after load')

$ python3.1 test1.py
5 init
5 after dump
99 after load

Ответ на: комментарий от easyrider

>это стеб такой? зачем для 10 строк sqlite?

Ну, будет двадцать строчек и сохранение данных в нормальном формате.

Absurd ★★★
()

Сериализуй инстансы классов и волосы будут мягкими и шелковистыми.

import io
import pickle

class b (object):
    def __init__(self):
        self.y=0

class a (object):
    x=1
    B=b()

x=a
x.B.y=5

print(x.B.y,'init')
f=io.open('test','wb')
pickle.dump(x.B,f)

f.close()
print(x.B.y,'after dump')

x.B.y=99

f=io.open('test','rb')
x.B=pickle.load(f)
print(x.B.y,'after load')

baverman ★★★
()
Ответ на: комментарий от Absurd

> Сохраняй лучше в sqlite

Зачем так категорично? Задача же не известна. Серьезный человек вроде...

baverman ★★★
()
Ответ на: комментарий от baverman

Спасибо, это работает. Я пытался делать почти так, но делал B=b вместо B=b(). А что делают скобки после имени класса?

easyrider
() автор топика
Ответ на: комментарий от easyrider

>Я пытался делать почти так, но делал B=b вместо B=b(). А что делают скобки после имени класса?

может быть, прежде чем что-то писать на каком-либо ЯП и задавать потом глупые вопросы, стоит хотя бы самую базовую документацию осилить? http://docs.python.org/tutorial/classes.html

shuthdar ★★★
()
Ответ на: комментарий от shuthdar

Я осилил, но видимо не все отложилось :) Внимательно перечитал, теперь все понятнее.

easyrider
() автор топика

O_o

Зачем тут вообще классы, да еще и вложенные? Есть же dict, tuple, namedtuple...

dccp
()

O_o

зачем import io; io.open('test','rb') когда есть просто open('test') ?

Пожалуйста, не пишите больше на питоне ничего.

dccp
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.