【发布时间】:2012-08-23 23:55:05
【问题描述】:
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 以避免这种情况?
【问题讨论】:
标签: python serialization pickle