猴子补丁

猴子补丁的用处

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

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

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

猴子补丁

  属性在运行时的动态替换,叫做猴子补丁(Monkey Patch)。

  作用是在运行的时候,动态替换模块方法。先看一个简单的例子

  如果有一个模块somemodule.py,在其它代码里面有用到这个类里面的speak方法

class SomeClass(object):

    def __init__(self):
        self.name = "yoyo"

    def speak(self):
        return "hello world"

  在不改变原来代码的基础上,可以重新定义一个speck方法,替换原来的

from xxx.somemodule import SomeClass


def new_speak(self):
    return "new hello"

# 替换speck方法
SomeClass.speak = new_speak

  替换之后,调用的时候,就会变成新的方法里面内容

some = SomeClass()
print(some.speak())
# 运行结果 new hello

替换模块

  还有一个比较实用的例子,很多代码用到 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() 

 

posted @ 2022-04-19 21:12  那就凑个整吧  阅读(23)  评论(0编辑  收藏  举报