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)