博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python中的猴子补丁Monkey Patch
阅读量:5916 次
发布时间:2019-06-19

本文共 1593 字,大约阅读时间需要 5 分钟。

 

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. 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 = func2instance.func1() # 我要取代你instance.func1 = func3instance.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中的响应的具有协程的协作式对象。这样在不改变原有代码的情况下,将应用的阻塞式方法,变成协程式的。

这里参考

注意问题

在使用猴子补丁的时候同样容易出现问题

  • 当进行版本更新变化的时候,很容易对补丁做出破坏
  • 不知情的情况下对一个位置打两个补丁会造成替换
  • 对于不知道有补丁的人来说可能会对出现的某些情况感到困惑

参考

 

转载于:https://www.cnblogs.com/sfencs-hcy/p/10549898.html

你可能感兴趣的文章
c#学习笔记
查看>>
你想面试运维看一下你合格了吗?
查看>>
[STM32F429-DISCO-uCosiii]3.uCOSIII 移植
查看>>
前端学PHP之文件操作
查看>>
LeetCode | Copy List with Random Pointer
查看>>
C语言博客05--指针
查看>>
Hamburger
查看>>
hdoj 题目分类
查看>>
软件测试工程师又一大挑战:大数据测试
查看>>
web 项目 布在tomcat服务器上出现的问题小记
查看>>
衡量线性回归法的指标MSE, RMSE,MAE和R Square
查看>>
js 创建对象
查看>>
Hibernate写配置文件无提示信息解决
查看>>
Windows平台下,Scrapy Installation,安装问题解决
查看>>
WCF数据契约代理和已知类型的使用
查看>>
EJB 的理解
查看>>
css样式初始化
查看>>
孙子算经 卷下
查看>>
我的第一个WinForm程序
查看>>
完美分页存储过程(有缺陷,无法加入条件)
查看>>