zoukankan      html  css  js  c++  java
  • 第三次小组分享 猴子补丁

    猴子补丁

    什么是:

    1,这个词原来为Guerrilla Patch,杂牌军、游击队,说明这部分不是原装的,在英文里guerilla发音和gorllia(猩猩)相似,再后来就写了monkey(猴子)。
    2,还有一种解释是说由于这种方式将原来的代码弄乱了(messing with it),在英文里叫monkeying about(顽皮的),所以叫做Monkey Patch。

    功能:

    功能:

    动态的属性的替换

    用处

    1. 在运行时替换方法、属性等

    2. 在不修改第三方代码的情况下增加原来不支持的功能

    3. 在运行时为内存中的对象增加patch而不是在磁盘的源代码中增加

      monkey patch允许在运行期间动态修改一个类或模块

      举例

    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() # 都给我一边去
    
    
    instance = Example()
    instance.func1()
    instance2 = Example()
    instance2.func1() # 我要取代你
    
    
    
    这里有一个比较实用的例子,很多代码用到 import json,后来发现ujson性能更高,如果觉得把每个文件的import json 改成 import ujson as json成本较高,或者说想测试一下用ujson替换json是否符合预期,只需要在入口加上:
    import json  
    import ujson  
    
    def monkey_patch_json():  
        
        json.__name__ = 'ujson'  
        json.dumps = ujson.dumps  
        json.loads = ujson.loads 
    monkey_patch_json()
    
  • 相关阅读:
    《构建之法》第1.2.3章读后感以及《硅谷传奇》观后感
    算复利条件下等额还款金额
    统计实验数据
    单利计算与复利计算程序
    了解和熟悉操作系统
    0302思考并回答一些问题
    sae storage 使用uploadify插件进行文件批量上传
    PHP页面之间跳转方法总结
    js获取每个按键的ASCII值
    C#文件的拆分与合并操作示例
  • 原文地址:https://www.cnblogs.com/zqfzqf/p/11996977.html
Copyright © 2011-2022 走看看