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 は「ListStore オブジェクトをピクルできません」という TypeError を発生させます。print ステートメントを使用して、__getstate__
pickle.dump を使用したときに関数が実行されることを確認しました。ドキュメントから次に何をすべきかについてのヒントが見当たらないので、少し困っています。助言がありますか?