第三次小组分享 猴子补丁
Posted zqfzqf
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第三次小组分享 猴子补丁相关的知识,希望对你有一定的参考价值。
猴子补丁
什么是:
1,这个词原来为Guerrilla Patch,杂牌军、游击队,说明这部分不是原装的,在英文里guerilla发音和gorllia(猩猩)相似,再后来就写了monkey(猴子)。
2,还有一种解释是说由于这种方式将原来的代码弄乱了(messing with it),在英文里叫monkeying about(顽皮的),所以叫做Monkey Patch。
功能:
功能:
动态的属性的替换
用处
在运行时替换方法、属性等
在不修改第三方代码的情况下增加原来不支持的功能
在运行时为内存中的对象增加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()
以上是关于第三次小组分享 猴子补丁的主要内容,如果未能解决你的问题,请参考以下文章