Я хотел бы реализовать класс (в идеале одноэлементный), для которого состояние должно быть восстановлено с использованием механизма cPickle на этапе инициализации. Для этого я написал следующий фрагмент кода:ошибка при раскраске класса из его конструктора
import cPickle
import collections
class Test(collections.OrderedDict):
path = "test.cp"
def __init__(self):
self.path = "test.cp"
collections.OrderedDict.__init__(self)
try:
f = open(Test.path,"rb")
except IOError:
return
else:
ud = cPickle.load(f)
self.update(ud)
f.close()
def save(self):
f = open(Test.path,"wb")
cPickle.dump(self,f)
f.close()
if __name__ == "__main__":
t = Test()
t.save()
t1 = Test()
Запуск, что сниппет производит следующее сообщение об ошибке:
Traceback (most recent call last):
File "C:\Documents and Settings\pellegrini\Bureau\test.py", line 31, in <module>
t1 = Test()
File "C:\Documents and Settings\pellegrini\Bureau\test.py", line 18, in __init__
ud = cPickle.load(f)
TypeError: ('__init__() takes exactly 1 argument (2 given)', <class '__main__.Test'>, ([],))
При наследовании от dict
вместо collections.OrderedDict
это работает. Из других подобных сообщений это может иметь какое-то отношение к методу __reduce__
, но я не понимаю, почему и как?
У вас есть представление о том, как решить эту проблему?
Большое спасибо
Эрик
Технически нет "Конструкторы", как, например, в Python. Просто метод инициализации. – Elazar