“猴子補(bǔ)丁”是動(dòng)態(tài)類型語言的一個(gè)特性,代碼運(yùn)行時(shí)在不修改源代碼的前提下改變代碼中的方法、屬性、函數(shù)等以達(dá)到熱補(bǔ)丁(hot patch)的效果。
很多系統(tǒng)的安全補(bǔ)丁也是通過猴子補(bǔ)丁的方式來實(shí)現(xiàn)的,但實(shí)際開發(fā)中應(yīng)該避免對(duì)猴子補(bǔ)丁的使用,以免造成代碼行為不一致的問題。
在使用gevent庫(kù)的時(shí)候,我們會(huì)在代碼開頭的地方執(zhí)行g(shù)event.monkey.patch_all(),這行代碼的作用是把標(biāo)準(zhǔn)庫(kù)中的socket模塊給替換掉,這樣我們?cè)谑褂胹ocket的時(shí)候,不用修改任何代碼就可以實(shí)現(xiàn)對(duì)代碼的協(xié)程化,達(dá)到提升性能的目的,這就是對(duì)猴子補(bǔ)丁的應(yīng)用。
另外,如果希望用ujson三方庫(kù)替換掉標(biāo)準(zhǔn)庫(kù)中的json,也可以使用猴子補(bǔ)丁的方式
代碼如下所示
import json, ujson json.__name__ = 'ujson' json.dumps = ujson.dumps json.loads = ujson.loads 單元測(cè)試中的Mock技術(shù)也是對(duì)猴子補(bǔ)丁的應(yīng)用,Python中的unittest.mock模塊就是解決單元測(cè)試中用Mock對(duì)象替代被測(cè)對(duì)象所依賴的對(duì)象的模塊。