先自定义两个模块,然后,我们调用模块时,用打补丁方式,改写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对象。

总结:至于这么做有什么用处,主要是在不改变原来的方法,但是又可以通过打补丁的方式,自定义一些功能。  到真正用的时候就你明白有什么用了。

python模块打补丁的更多相关文章

  1. python模块和类的通用转换规则(2),三步转oo

    介绍模块和类怎么互相转换,不谈面向对象的继承 封装 多态等特点. 一个person_module模块,有人的基本属性和功能. person_module.py如下 # coding=utf8 name ...

  2. 使用C/C++写Python模块

    最近看开源项目时学习了一下用C/C++写python模块,顺便把学习进行一下总结,废话少说直接开始: 环境:windows.python2.78.VS2010或MingW 1 创建VC工程 (1) 打 ...

  3. Python模块之configpraser

    Python模块之configpraser   一. configpraser简介 用于处理特定格式的文件,其本质还是利用open来操作文件. 配置文件的格式: 使用"[]"内包含 ...

  4. Python模块之"prettytable"

    Python模块之"prettytable" 摘要: Python通过prettytable模块可以将输出内容如表格方式整齐的输出.(对于用Python操作数据库会经常用到) 1. ...

  5. python 学习第五天,python模块

    一,Python的模块导入 1,在写python的模块导入之前,先来讲一些Python中的概念性的问题 (1)模块:用来从逻辑上组织Python代码(变量,函数,类,逻辑:实现一个功能),本质是.py ...

  6. windows下安装python模块

    如何在windows下安装python模块 1. 官网下载安装包,比如(pip : https://pypi.python.org/pypi/pip#downloads) pip-9.0.1.tar. ...

  7. 安装第三方Python模块,增加InfoPi的健壮性

    这3个第三方Python模块是可选的,不安装的话InfoPi也可以运行. 但是如果安装了,会增加InfoPi的健壮性. 目录 1.cchardet    自动检测文本编码 2.lxml    用于解析 ...

  8. Python基础篇【第5篇】: Python模块基础(一)

    模块 简介 在计算机程序的开发过程中,随着程序代码越写越多,在一个文件里代码就会越来越长,越来越不容易维护. 为了编写可维护的代码,我们把很多函数分组,分别放到不同的文件里,这样,每个文件包含的代码就 ...

  9. python 模块加载

    python 模块加载 本文主要介绍python模块加载的过程. module的组成 所有的module都是由对象和对象之间的关系组成. type和object python中所有的东西都是对象,分为 ...

随机推荐

  1. GO string 的学习

    1.replace func Replace(s, old, new string, n int) string s:原来的字符串 old: 要被替换的久的字符串 new string:要替换旧字符串 ...

  2. java中对象转json,json转list,json转map

    在IDEA中的springboot项目里写的一个测试例子,新建User类,四个字段,Long id , String password,String userName,int age; 以及带参构造, ...

  3. Java线程通信-生产者消费者问题

    线程通信示例——生产者消费者问题 这类问题描述了一种情况,假设仓库中只能存放一件产品,生产者将生产出来的产品放入仓库,消费者将仓库中的产品取走消费.假设仓库中没有产品,则生产者可以将 产品放入仓库,有 ...

  4. 超微主板IPMI的使用

    https://blog.nicky1605.com/supermicro-motherboards-use-ipmi.html IPMI(智能平台管理接口)现在大部分都是集成到主板上了,我们利用IP ...

  5. LOJ 3090 「BJOI2019」勘破神机——斯特林数+递推式求通项+扩域

    题目:https://loj.ac/problem/3090 题解:https://www.luogu.org/blog/rqy/solution-p5320 1.用斯特林数把下降幂化为普通的幂次求和 ...

  6. window安装oracle和创建数据库

    原文地址: https://www.cnblogs.com/hoobey/p/6010804.html  #11g安装 https://www.cnblogs.com/qq1272850043/p/6 ...

  7. ffmpeg+nginx-rtmp-module

    原址: https://www.cnblogs.com/cnsanshao/p/6370938.html另外: vlc播放器能播放rtsp协议 nginx安装和配置 模块下载 https://gith ...

  8. python中的__init__

    __init__ __init__中__表示系统默认命名,init是初始化的意思.由于类可以起到模板的作用,因此,可以在创建实例的时候,把一些我们认为必须绑定的属性强制填写进去.以学生类为例,通过定义 ...

  9. LintCode之删除链表中的元素

    题目描述 我的代码 /** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode n ...

  10. python函数的参数-可变参数,关键字参数

    # -*- coding: utf-8 -*- #coding=utf-8 ''' @author: tomcat @license: (C) Copyright 2017-2019, Persona ...