python模块打补丁
2019-10-23 14:21 _天枢 阅读(1878) 评论(0) 编辑 收藏 举报先自定义两个模块,然后,我们调用模块时,用打补丁方式,改写mod_1.py模块。为mod_2.py内容;其实这就相当于,在不改动mod_1.py模块的前提下,打上补丁。
写这个主要是gevent协程的时候,用到的monkey.patch_all()补丁,其实原理就是这样。
mod_1.py
mod_2.py
第一种方法:
调用时实现补丁。
def monkey_patch_module_2(): import sys import mod_1 #mod_1.mod1_function() #print mod1_function sys.modules['mod_1'] = __import__("mod_2") import mod_1 mod_1.mod2_function() #print mod2_function monkey_patch_module_2()
结果输出:
mod2_function
小结:从结果可以看出,我们已经把mod_1.py模块,以补丁的形势,替换到了mod_1.py中。
其实严格的说,不能算是打补丁,因为这里完全的把mod_1.py模块的内容替换成了mod_2.py。
这也是在不改变系统原来的代码或内置函数的情况下,来替成我们的代码。注意,这是替换运行时的模块内容。
第二种方法:
import mod_1 import mod_2 def mokey_patch_m_2(): mod_1.__name__ = "mod_2" #此可有可无,但是防止乱,还是加上好。 mod_1.mod1_function = mod_2.mod2_function mokey_patch_m_2() mod_1.mod1_function()
结果:
mod2_function
小结:从结果可以看出,mod_1模块的mod1_function()输出的是mod2_function的内容。
其实不难理解,我们就是在运行时,将mod_1.mod1_funcion对象,替换成mod2_function对象。
总结:至于这么做有什么用处,主要是在不改变原来的方法,但是又可以通过打补丁的方式,自定义一些功能。 到真正用的时候就你明白有什么用了。
作 者:
天枢
出 处:
http://www.cnblogs.com/yhleng/
关于作者:专注于软件自动化测试领域。如有问题或建议,请多多赐教!
版权声明:本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接。
特此声明:所有评论和私信都会在第一时间回复。也欢迎园子的大大们指正错误,共同进步。或者
直接私信我
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角
【
推荐】
一下。您的鼓励是作者坚持原创和持续写作的最大动力!