import pickle
class conf(object):
def __init__(self, dic):
self._dic = dic
def __getattr__(self, key):
return self._dic[key]
def __str__(self):
return self._dic.__str__()
def __getstate__(self):
return pickle.dumps(self._dic)
def __setstate__(self, d):
self._dic = pickle.loads(d)
if __name__ == "__main__":
c = conf({'a':1})
d = pickle.loads(pickle.dumps(c))
print(c.a)
print(d.a)
2018年12月19日水曜日
pythonで__getattr__を定義したオブジェクトのpickle
Pythonでは__getattr__を定義すると属性が定義できる。が、これを定義すると、pickleしたときに、__getstate__が呼ばれてkeyerror で落ちる。よくわからないが、こんなふうにしたら落ちなくなった。正しい回避方法はわからない。。
登録:
コメント (Atom)