привет, у меня проблемы с пониманием того, как сохранить и загрузить экземпляр класса. Я видел этот вопрос о __setstate__
и __getstate__
, но он не помочь много.
Скажем, у меня есть класс:
class Foo(object):
def __init__(self, a, b):
super(Foo, self).__init__()
self.a = a
self.b = b
self.c = 0
def Sum(self):
self.c = self.a + self.b
так что:
foo = Foo(1, 1)
print('c is defaulted to 0')
print(foo.c)
foo.Sum()
print('Now it is the sum')
print(foo.c)
будет печатать:
c is defaulted to 0
0
Now it is the sum
2
Что я хочу сделать, так это написать метод Save и метод Load для сохранения и загрузки этого экземпляра класса. так что:
foo = Foo(1, 1)
print('c is defaulted to 0')
print(foo.c)
foo.Sum()
print('Now it is the sum')
print(foo.c)
foo.Save(filename)
foo.a = 0
foo.Sum()
print('Changed c')
print(foo.c)
foo.Load(filename)
print('Reloaded class')
print(foo.c)
должен вывести:
c is defaulted to 0
0
Now it is the sum
2
Changed c
1
Reloaded class
2
На данный момент я написал методы как таковые:
def Save(self, file):
f = open(file, "wb")
pickle.dump(self, f)
f.close()
def Load(self, file):
f = open(file, "rb")
self = pickle.load(f)
f.close()
Однако это не работает, поскольку значение foo.c по-прежнему равно 1. Я явно ошибаюсь в понимании того, как сохраняется экземпляр класса, но я не могу понять, почему. Спасибо за помощь.