码迷,mamicode.com
首页 > 其他好文 > 详细

第三次小组分享 猴子补丁

时间:2019-12-06 19:53:46      阅读:114      评论:0      收藏:0      [点我收藏+]

标签:入口   port   英文   允许   发音   json   比较   err   with   

猴子补丁

什么是:

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()

第三次小组分享 猴子补丁

标签:入口   port   英文   允许   发音   json   比较   err   with   

原文地址:https://www.cnblogs.com/zqfzqf/p/11996977.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!