我正在尝试使用 pickle 转储自定义类。该类是 gtk.ListStore 的子类,因为这样可以更轻松地存储特定数据,然后使用 gtk 显示它。这可以重现,如此处所示。
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__
我的类中添加一个函数。据我了解文档,这应该优先于 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 时运行。我没有从文档中看到任何关于下一步该做什么的提示,所以我有点束手无策。有什么建议么?