2018年12月19日水曜日

pythonで__getattr__を定義したオブジェクトのpickle

Pythonでは__getattr__を定義すると属性が定義できる。が、これを定義すると、pickleしたときに、__getstate__が呼ばれてkeyerror で落ちる。よくわからないが、こんなふうにしたら落ちなくなった。正しい回避方法はわからない。。
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年8月16日木曜日

Emacs 25.3 をMac OSでビルド

Brewとかでインストールすると、日本語パッチがあたっていなくて厳しいので。 https://qiita.com/takaxp/items/e07bb286d80fa9dd8e05 の手順で。goolge IMEの場合はpatchが違うので注意。 大昔の感覚だと、emacsのビルドなんて一晩掛かりそうで嫌だったんだけど、 最近だと大して時間がかからなくてびっくりだ。