溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Python中猴子補丁知識點有哪些

發(fā)布時間:2021-08-03 12:21:32 來源:億速云 閱讀:130 作者:小新 欄目:開發(fā)技術(shù)

這篇文章主要介紹Python中猴子補丁知識點有哪些,文中介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們一定要看完!

屬性在運行時的動態(tài)替換,叫做猴子補?。∕onkey Patch)。

為什么叫猴子補丁

屬性的運行時替換和猴子也沒什么關(guān)系,關(guān)于猴子補丁的由來網(wǎng)上查到兩種說法:

1.這個詞原來為Guerrilla Patch,雜牌軍、游擊隊,說明這部分不是原裝的,在英文里guerilla發(fā)音和gorllia(猩猩)相似,再后來就寫了monkey(猴子)。

2.還有一種解釋是說由于這種方式將原來的代碼弄亂了(messing with it),在英文里叫monkeying about(頑皮的),所以叫做Monkey Patch。

猴子補丁的叫法有些莫名其妙,只要和“模塊運行時替換的功能”對應(yīng)就行了。

猴子補丁的用法

1、運行時動態(tài)替換模塊的方法

stackoverflow上有兩個比較熱的例子,

consider a class that has a method get_data. This method does an

external lookup (on a database or web API, for example), and various

other methods in the class call it. However, in a unit test, you don't

want to depend on the external data source - so you dynamically

replace the get_data method with a stub that returns some fixed data.

假設(shè)一個類有一個方法get_data。這個方法做一些外部查詢(如查詢數(shù)據(jù)庫或者Web API等),類里面的很多其他方法都調(diào)用了它。然而,在一個單元測試中,你不想依賴外部數(shù)據(jù)源。所以你用啞方法態(tài)替換了這個get_data方法,啞方法只返回一些測試數(shù)據(jù)。

另一個例子引用了,Zope wiki上對Monkey Patch解釋:

from SomeOtherProduct.SomeModule import SomeClass

def speak(self):

  return "ook ook eee eee eee!"

SomeClass.speak = speak

還有一個比較實用的例子,很多代碼用到 import json,后來發(fā)現(xiàn)ujson性能更高,如果覺得把每個文件的import json 改成 import ujson as json成本較高,或者說想測試一下用ujson替換json是否符合預(yù)期,只需要在入口加上:

import json

import ujson

def monkey_patch_json():

  json.__name__ = 'ujson'

  json.dumps = ujson.dumps

  json.loads = ujson.loads

monkey_patch_json()

2、運行時動態(tài)增加模塊的方法

這種場景也比較多,比如我們引用團隊通用庫里的一個模塊,又想豐富模塊的功能,除了繼承之外也可以考慮用Monkey Patch。

以上是“Python中猴子補丁知識點有哪些”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對大家有幫助,更多相關(guān)知識,歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI