python types.MethodType

[`evernote` not found]
Bookmark this on Hatena Bookmark
Share on Facebook
LINEで送る

自作モジュールに問題にチューンした処理を追加しないといけないことがあって,types.MethodTypeでメソッドを追加しようとした話.
自作モジュール内でimportされたモジュールを使う時,どうすればいいのかなー,とか,自作モジュール内のimport時につけた別名と被ったらどうなるのかなー,とか調べてみた.

おおむね予想通り.
自作モジュールを丸ごとimportしてたら参照できるけど,from/importでクラスしか取り込んでなかったら,別途,importしないといけない.
別名が被ったところで,スコープが被るわけじゃないから,人が見て分かりにくいことを除けば問題なくスコープ内のモジュールが呼び出される.

ということを全部は反映してないけど,簡単な使い方メモ.
これは,unbundle版.

import numpy as np
class MyModule:
    def test(self):
        return np.array([1,2,3])
import types
import mymodule

def new_test(self):
    return mymodule.np.array([4])

mymodule.MyModule.additionalMethod = \
    types.MethodType(new_test, None, mymodule.MyModule)
mymod = mymodule.MyModule()
print mymod.test()
print mymod.additionalMethod()

実行結果

$ python mydriver.py
[1 2 3]
[4]