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