属性在运行时的动态替换,叫做猴子补丁(Monkey Patch)。猴子补丁的叫法有些莫名其妙,只要和“模块运行时替换的功能”对应就行了。Monkey patch就是在运行时对已有的代码进行修改,达到hot patch的目的。Eventlet中大量使用了该技巧,以替换标准库中的组件,比如socket。# 猴子补丁的用法## 1,运行时动态替换模块的方法比如一个类有一个方法get-data 这个方法做一些外部查询,类里面很多其他方法都调用了他,然而,咋一个单元测试中,不想依赖外部数据,所以用你哑方法get_data,只返回一些数据。fromsomeothrproduct.somemoduleimportsomeclassdefspeak(self):return"ook ook eee eee eee!"SomeClass.speak = speak很多代码用到importjson,发现ujson性能高,如果把每个文件的importjson改成importujsonasjson 成本高或者是测试一下ujson替换json是否符合importjsonimportujsondefmonkey_patch_json():json._name_ ="ujson"jsonjson.loads = ujson.loads monkey_patch_json()常见问题当猴子补丁的假设由于代码更新不再为真的时候,这可能导致一些问题,因此猴子补丁常常在条件下使用。如果两个模块同时打了猴子补丁,只有后打的补丁才有效。源代码和其行为在不知道有猴子补丁的人的视角下会出现矛盾。
猴子补丁
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 写了一段时间java切回写python偶尔会出现一些小麻烦,比如:在java中自定义对象变成json串很简单,调用...
- 猴子补丁(Monkey Patch) 猴子补丁, 顾名思义...完全不知道是什么玩意有木有, 可能有些历史原因, ...