這篇文章帶給大家的內容是關於python中猴子補丁是什麼?怎麼用?有一定的參考價值,有需要的朋友可以參考一下,希望對你有幫助。
什麼是猴子補丁
the term monkey patch only refers to dynamic modifications of a class or module at runtime, motivated by the intent to patch existing third -party code as a workaround to a bug or feature which does not act as desired
即在運行時對方法/ 類別/ 屬性/ 功能進行修改,把新的程式碼作為解決方案代替原有的程序,也就是為其打上補丁。
為什麼叫做猴子補丁
The term monkey patch seems to have come from an earlier term, guerrilla patch, which referred to changing code sneakily – and possibly incompatibly with chesother s pat – and possibly incompatibly with ches such pat – and possibly incompatibly with such pat> at runtime.The word guerrilla, homophonous with gorilla (or nearly so), became monkey, possibly to make the patch sound less intimidating.[1] An alternative etymology is that it refers to “monkeying 更多” ).
一種說法雜牌軍、遊擊隊的英文發音與猩猩相似,雜牌軍、遊擊隊不是原裝軍隊,就像是替補,所以也就演變叫做猴子補丁另一種說法「monkeying about」有胡鬧,頑皮,哄騙的意思,所以叫做猴子補丁
python中使用猴子補丁
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() # 都给我一边去instance2 = Example() instance2.func1() # 我要取代你
例子非常簡單,func2取代的是類的方法,func3取代的是實例的方法,最終輸出都不是原始
其他例子
在使用gevent模組的使用就會遇到猴子補丁
import gevent.monkey gevent.monkey.patch_all()
使用猴子補丁的方式, gevent能夠修改標準函式庫裡面大部分的阻塞式系統調用,包括socket、ssl、threading和select等模組,而變成協作式運作。也就是透過猴子補丁的monkey.patch_xxx()來將python標準庫中模組或函數改成gevent中的回應的具有協程的協作式物件。這樣在不改變原有程式碼的情況下,將應用程式的阻塞式方法,變成協程式的。
這裡參考https://blog.csdn.net/wangjianno2/article/details/51708658
注意問題
在使用猴子補丁的時候同樣容易出現問題
當進行版本更新變更的時候,很容易對補丁做出破壞不知情的情況下對一個位置打兩個補丁會造成替換對於不知道有補丁的人來說可能會對出現的某些情況感到困惑
以上是python中猴子補丁是什麼?怎麼用?的詳細內容。更多資訊請關注PHP中文網其他相關文章!