[ ]
宙飒天下网-ZhouSa.com 1. 使用猴子补丁在运行时对代码进行修改
Monkey patch就是在运行时对已有的代码进行修改,达到hot patch的目的
在运行时修改类或模块,而不改动源码,这种技术叫猴子补丁. 猴子补丁很强大,但是打补丁的代码与要打补丁的程序耦合十分紧密,而且往往要处理隐藏和没有文档的部分
需要注意实验猴子补丁或者热更新必须使用import xxxx这样的语法导入模块,用from语法无效
1.1. 使用猴子补丁在运行时修改模块中的对象
例: 修改math模块中pi和e的值
import math math.pi 3.141592653589793 math.pi = 3.14 math.pi 3.14 math.e 2.718281828459045 def patch_math(): math.e = 2.72 patch_math() math.e math.pi 11.2. 取消猴子补丁
取消猴子补丁需要先取消模块的引入,之后再重新引入即可.
模块引入后会存放在sys.modules这个字典中.因此,要取消引入,只要删除该字典中的对应值即可
math.pi 2 math.pi 3 math.pi 4 math.e math.pi 6math.pi 7 math.pi 6math.pi 9 math.e 2.718281828459045 math.pi 7 2.718281828459045 需要注意我们往往会将猴子补丁单独写在一个模块中,这种时候猴子补丁的执行函数需要先执行,再导入被打补丁的模块才能生效
2. 热更新
另一个用于热更新的方式是使用importlib.reload方法
3.141592653589793 4 3.141592653589793 53.141592653589793 6 3.141592653589793 7 3.141592653589793 83.141592653589793 9 math.pi = 3.14 0math.pi = 3.14 1 3.141592653589793 5math.pi = 3.14 3 math.pi = 3.14 4 math.pi = 3.14 53.141592653589793 7 math.pi = 3.14 73.141592653589793 9 math.pi = 3.14 9 



还没有评论,来说两句吧...