标签:入口 port 英文 允许 发音 json 比较 err with
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()
标签:入口 port 英文 允许 发音 json 比较 err with
原文地址:https://www.cnblogs.com/zqfzqf/p/11996977.html