pythonで、関数もオブジェクトだから既存のライブラリを書き換えてしまえ。
main.py
from funcs import funcfuncs/func.py #元の関数
def main():
func.printStr(u'hello')
if __name__ == '__main__':
main()
import monkey #新しい関数でpatch
main()
def printStr(string):monkey_patch.py #新しい関数
print u'original', string
import funcs
def monkey_patch_func():
def new_printStr(string):
print u'monkey', string
print funcs.func.printStr
funcs.func.old_printStr = funcs.func.printStr #元の関数を退避
funcs.func.printStr = new_printStr #新しい関数を接続
print funcs.func.printStr
monkeypatched = False #新しい関数の接続は1回だけ
if not monkeypatched:
monkey_patch_func()
monkeypatched = True
0 件のコメント:
コメントを投稿