我构建了collections.OrderedDict标准类的子类。当我尝试unpickle这个班,我得到以下错误的对象:酸洗OrderedDict派生对象
Traceback (most recent call last):
File "pickle.py", line 29, in <module>
print cPickle.load(f)
TypeError: ('__init__() takes exactly 1 argument (2 given)', <class '__main__.ConfiguratorsDict'>, ([['toto', 20]],))
试图理解这种行为的原因我缩小collections.OrderedDict的身体得到以下最低代码触发aformentionned错误。这里是:
import cPickle
class OrderedDict(dict):
def __reduce__(self):
items = [[k, self[k]] for k in self]
inst_dict = vars(self).copy()
for k in vars(OrderedDict()):
inst_dict.pop(k, None)
if inst_dict:
return (self.__class__, (items,), inst_dict)
return self.__class__, (items,)
class ConfiguratorsDict(OrderedDict):
def __init__(self):
OrderedDict.__init__(self)
self._myspec = "blabla"
if __name__ == "__main__":
f = open("test.pickle","wb")
c = ConfiguratorsDict()
c["toto"] = 20
cPickle.dump(c,f)
f.close()
f = open("test.pickle","rb")
print cPickle.load(f)
f.close()
在这一点上,我真的不明白那里出了什么问题。有没有我误解pickle机制的东西,还是有一些与OrderedDict有关的麻烦?
非常感谢您的帮助
非常感谢!为了真诚,我多次阅读本节,但没有真正理解它。随着你的回答,它现在更清晰了。 – Eurydice