Python: ошибки сохранения и загрузки объектов с помощью модуля pickle - PullRequest
0 голосов
/ 01 января 2011

Я пытаюсь загрузить и сохранить объекты с помощью этого фрагмента кода. Я получил его из вопроса, который я задал неделю назад: Python: сохранение и загрузка объектов и использование pickle.

Код выглядит так:

class Fruits: pass

banana = Fruits()    
banana.color = 'yellow'     
banana.value = 30

import pickle

filehandler = open("Fruits.obj","wb")    
pickle.dump(banana,filehandler)    
filehandler.close()

file = open("Fruits.obj",'rb')    
object_file = pickle.load(file)    
file.close()

print(object_file.color, object_file.value, sep=', ')

На первый взгляд фрагмент кода работает хорошо, загружается и видит «цвет» и «значение» сохраненного объекта. Но я преследую цель закрыть сеанс, открыть новый и загрузить то, что я сохранил в прошлом сеансе. Я закрываю сессию после ввода строки filehandler.close(), открываю новую и помещаю остаток вашего кода, затем после ввода object_file = pickle.load(file) получаю эту ошибку:

Traceback (most recent call last): 
File "<pyshell#5>", line 1, in <module> 
object_file = pickle.load(file) 
File "C:\Python31\lib\pickle.py", line 1365, in load 
encoding=encoding, errors=errors).load() 
AttributeError: 'module' object has no attribute 'Fruits' 

Может кто-нибудь объяснить мне, что означает это сообщение об ошибке и как решить эту проблему?

Большое спасибо и счастливого нового года !!

1 Ответ

3 голосов
/ 01 января 2011

Python не расслаивает целые классы. Только имена. Поэтому необходимо, чтобы модуль, содержащий их, был сохранен в файл и импортирован во время их удаления. Затем Python повторно импортирует их.

Если вы столкнулись с проблемами, вам может потребоваться определить специальные вспомогательные методы __getstate__ и __setstate__, которые используются для травления.

...