python中的猴子补丁Monkey Patch
python中的猴子补丁monkey patch
什么是猴子补丁
the term monkey patch only refers to dynamic modifications of a class or module at runtime, motivated by the intent to patch existing third-party code as a workaround to a bug or feature which does not act as desired
即在运行时对方法 / 类 / 属性 / 功能进行修改,把新的代码作为解决方案代替原有的程序,也就是为其打上补丁。
为什么叫做猴子补丁
the term monkey patch seems to have come from an earlier term, guerrilla patch, which referred to changing code sneakily – and possibly incompatibly with other such patches – at runtime.the word guerrilla, homophonous with gorilla (or nearly so), became monkey, possibly to make the patch sound less intimidating.[1] an alternative etymology is that it refers to “monkeying about” with the code (messing with it).
- 一种说法杂牌军、游击队的英文发音与猩猩相似,杂牌军、游击队不是原装军队,就像是替补,所以也就演变叫做猴子补丁
- 另一种说法“monkeying about”有胡闹,顽皮,哄骗的意思,所以叫做猴子补丁
python中使用猴子补丁
class example(): def func1(self): print('我才是原装') def func2(*args): print('我要取代你') def func3(*args): print('都给我一边去') instance = example() example.func1 = func2 instance.func1() # 我要取代你 instance.func1 = func3 instance.func1() # 都给我一边去 instance2 = example() instance2.func1() # 我要取代你
例子非常简单,func2取代的是类的方法,func3取代的是实例的方法,最终输出都不是原装
其他例子
在使用gevent模块的使用就会遇到猴子补丁
import gevent.monkey gevent.monkey.patch_all()
使用猴子补丁的方式,gevent能够修改标准库里面大部分的阻塞式系统调用,包括socket、ssl、threading和 select等模块,而变为协作式运行。也就是通过猴子补丁的monkey.patch_xxx()来将python标准库中模块或函数改成gevent中的响应的具有协程的协作式对象。这样在不改变原有代码的情况下,将应用的阻塞式方法,变成协程式的。
这里参考
注意问题
在使用猴子补丁的时候同样容易出现问题
- 当进行版本更新变化的时候,很容易对补丁做出破坏
- 不知情的情况下对一个位置打两个补丁会造成替换
- 对于不知道有补丁的人来说可能会对出现的某些情况感到困惑
上一篇: dede二级导航
推荐阅读
-
python运行时修改代码的方法——monkey patch
-
详解Python编程中对Monkey Patch猴子补丁开发方式的运用
-
Monkey Patch猴子补丁编程方式及其在Ruby中的运用
-
Ruby使用Monkey Patch猴子补丁方式进行程序开发的示例
-
Python面试题之“猴子补丁”(monkey patching)指的是什么?这种做法好吗?
-
python运行时修改代码的方法——monkey patch
-
python中猴子补丁是什么?怎么用?
-
Python中的猴子补丁是什么
-
Python面试题之“猴子补丁”(monkey patching)指的是什么?这种做法好吗?
-
Python编程中对Monkey Patch猴子补丁开发方式