import cPickle
class Foo(object):
def __init__(self):
self._data = {'bar': 'baz'}
def __getattr__(self, name):
assert hasattr(self, '_data')
return self._data[name]
# I even had to define this just to stop KeyError: '__getstate__'
def __getstate__(self):
return self.__dict__
foo = Foo()
bar = cPickle.dumps(foo)
cPickle.loads(bar)
これにより、アサーション エラーが発生します。
pickle
/は、ダンプ時に文字列にcPickle
変わり、その文字列を使用して、ロード時に新しいオブジェクトの を直接設定すると思いました。なぜ電話する必要があるのですか?それを回避するにはどうすれば変更できますか?__dict__
__dict__
dumps
bar.__getattr__
Foo