我想使用pickle转储一个自定义类。该类从gtk.ListStore继承而来,因为这使得更容易存储特定数据,然后使用gtk显示它。这可以如下所示进行再现。使用pickle转储gtk.ListStore的子类
import gtk
import pickle
import os
class foo(gtk.ListStore):
pass
if __name__=='__main__':
x = foo(str)
with open(os.path.expandvars('%userprofile%\\temp.txt'),'w') as f:
pickle.dump(x,f)
我试过的解决方案是将__getstate__
函数添加到我的类中。据我了解documentation,这应该优先pickle,以便它不再尝试序列化它无法做的ListStore。然而,当我尝试腌制我的对象时,仍然从pickle.dump中得到一个相同的错误。错误可以复制如下。
import gtk
import pickle
import os
class foo(gtk.ListStore):
def __getstate__(self):
return 'bar'
if __name__=='__main__':
x = foo(str)
with open(os.path.expandvars('%userprofile%\\temp.txt'),'w') as f:
pickle.dump(x,f)
在每种情况下,和pickle.dump引发一个TypeError, “不能酸洗ListStore对象”。使用print语句,我已经验证了__getstate__
函数在使用pickle.dump时运行。我从文档中看不到有关下一步要做什么的提示,所以我有点困惑。有什么建议么?