猴子补丁

作者: 我的好昵称 | 来源:发表于2019-07-03 20:47 被阅读0次
    属性在运行时的动态替换,叫做猴子补丁(Monkey Patch)。
    猴子补丁的叫法有些莫名其妙,只要和“模块运行时替换的功能”对应就行了。
    
    Monkey patch就是在运行时对已有的代码进行修改,达到hot patch的目的。
    Eventlet中大量使用了该技巧,以替换标
    准库中的组件,比如socket。
    
    # 猴子补丁的用法
    
    ## 1,运行时动态替换模块的方法
    比如一个类有一个方法get-data 这个方法做一些外部查询,类里面很多其他方法都调用了他,然而,咋一个单元测试中,不想依赖外部数据,所以用你哑方法get_data,只返回一些数据。
    
    from someothrproduct.somemodule import someclass
    def speak(self):
      return "ook ook eee eee eee!"
    
    SomeClass.speak = speak
    
    很多代码用到import  json,发现ujson性能高,
    如果把每个文件的import json改成import ujson as json 成本高或者是测试一下ujson替换json是否符合
    
    import json
    import ujson
    def monkey_patch_json():
      json._name_ = "ujson"
    json
    json.loads = ujson.loads  
    
    monkey_patch_json()
    
    常见问题
    当猴子补丁的假设由于代码更新不再为真的时候,这可能导致一些问题,因此猴子补丁常常在条件下使用。
    
    如果两个模块同时打了猴子补丁,只有后打的补丁才有效。
    
    源代码和其行为在不知道有猴子补丁的人的视角下会出现矛盾。
    
    

    相关文章

      网友评论

        本文标题:猴子补丁

        本文链接:https://www.haomeiwen.com/subject/pqhqhctx.html