欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python猴子補(bǔ)丁Monkey Patch用法實例解析

 更新時間:2020年03月23日 10:59:16   作者:python大師  
這篇文章主要介紹了Python猴子補(bǔ)丁Monkey Patch用法實例解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下

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

為什么叫猴子補(bǔ)丁

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

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

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

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

猴子補(bǔ)丁的用法

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)增加模塊的方法

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

個人感覺Monkey Patch帶了便利的同時也有搞亂源代碼優(yōu)雅的風(fēng)險。

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 教你用Python寫一個植物大戰(zhàn)僵尸小游戲

    教你用Python寫一個植物大戰(zhàn)僵尸小游戲

    這篇文章主要介紹了教你用Python寫一個植物大戰(zhàn)僵尸小游戲,文中有非常詳細(xì)的代碼示例,對正在學(xué)習(xí)python的小伙伴們有非常好的幫助,需要的朋友可以參考下
    2021-04-04
  • Python實現(xiàn)在PDF插入頁眉頁腳

    Python實現(xiàn)在PDF插入頁眉頁腳

    在處理篇幅較長、結(jié)構(gòu)復(fù)雜的PDF文檔時,頁眉和頁腳的設(shè)計與插入就顯得尤為重要,本文主要介紹了如何使用Python代碼操作PDF文檔,在PDF文檔中插入自定義的頁眉和頁腳,有需要的可以參考下
    2024-04-04
  • Python實現(xiàn)求兩個csv文件交集的方法

    Python實現(xiàn)求兩個csv文件交集的方法

    這篇文章主要介紹了Python實現(xiàn)求兩個csv文件交集的方法,涉及Python針對csv文件的讀取、遍歷、判斷等相關(guān)操作技巧,需要的朋友可以參考下
    2017-09-09
  • Flask?使用類組織配置詳情

    Flask?使用類組織配置詳情

    這篇文章主要介紹了Flask使用類組織配置,在實際的項目中,我們一般都會建立三個環(huán)境:開發(fā)、測試和生產(chǎn)環(huán)境,這三種環(huán)境會使用不同的配置組合,為了能方便地切換配置,我們可以為不同的環(huán)境創(chuàng)建不同的配置文件,下面來看詳細(xì)內(nèi)容,需要的朋友可以參考一下
    2021-11-11
  • 解決Pycharm下面出現(xiàn)No R interpreter defined的問題

    解決Pycharm下面出現(xiàn)No R interpreter defined的問題

    今天小編就為大家分享一篇解決Pycharm下面出現(xiàn)No R interpreter defined的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-10-10
  • Python中sys.stdout方法的語法示例詳解

    Python中sys.stdout方法的語法示例詳解

    Python中sys 模塊中的一個方法是stdout ,它使用其參數(shù)直接顯示在控制臺窗口上,print() 方法,它有相同的行為,首先轉(zhuǎn)換為sys.stdout() 方法,然后在控制臺顯示結(jié)果,本文給大家介紹Python sys.stdout方法的語法,感興趣的朋友一起看看吧
    2023-09-09
  • python字典按照value排序方法

    python字典按照value排序方法

    在本篇文章里小編給各位分享一篇關(guān)于python字典按照value排序方法的相關(guān)文章,有興趣的朋友們可以學(xué)習(xí)下。
    2020-12-12
  • django的ORM操作 刪除和編輯實現(xiàn)詳解

    django的ORM操作 刪除和編輯實現(xiàn)詳解

    這篇文章主要介紹了django的ORM操作 刪除和編輯實現(xiàn)詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-07-07
  • matplotlib jupyter notebook 圖像可視化 plt show操作

    matplotlib jupyter notebook 圖像可視化 plt show操作

    這篇文章主要介紹了matplotlib jupyter notebook 圖像可視化 plt show操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-04-04
  • 淺談Python中帶_的變量或函數(shù)命名

    淺談Python中帶_的變量或函數(shù)命名

    這篇文章主要介紹了淺談Python中帶_的變量或函數(shù)命名,簡單介紹了Python編程風(fēng)格的描述文檔,以及帶有下劃線的命名規(guī)則,具有一定參考價值,需要的朋友可以了解下。
    2017-12-12

最新評論