TechBridge 技術共筆部落格

var topics = ['Web前後端', '行動網路', '機器人/物聯網', '數據分析', '產品設計', 'etc.']

Python Monkey Patch 入門教學


 如何使用 Python Monkey Patch)

前言

Python 是近來十分火紅的程式語言,不管是網站開發、遊戲開發或是資料科學都可以看見 Python 的身影,本系列文章將透過複習 Python 小 tips,讓讀者可以重新認識 Python。這次我們先來認識一下 Monkey Patch 這個程式設計上的小技巧。

什麼是 Monkey Patch

簡單來說,Monkey Patch 就是在 run time 時動態更改 class 或是 module 已經定義好的函數或是屬性內容。實務上常見的使用在 test 上用來 mock 行為或是 gevent 函式庫等。

1
A MonkeyPatch is a piece of Python code which extends or modifies other code at runtime (typically at startup).

製作第一個 Python Monkey Patch

我們這邊開了一個簡單的 monkey.py 檔案,裡面放置 demo 用的 class:MyClass,裡面有個 method 叫 f,會列印出 f() 字串,

1
2
3
4
# monkey.py
class MyClass:
def f(self):
print 'f()'

此時我們在另外一個 main.py 檔案引入 monkey module,並替換掉 f function 為 monkey_f,這樣定義的出來的 instance 呼叫方法 f() 印出的則為 monkey_f()

1
2
3
4
5
6
7
8
9
10
# main.py
import monkey
def monkey_f(self):
print 'monkey_f()'
monkey.MyClass.f = monkey_f
obj = monkey.MyClass()
obj.f()
# monkey_f()

總結

以上就是 Python Monkey Patch 簡單介紹,Python Monkey Patch 主要用於動態於 run time 改變 class 的屬性或是方法,實務上常見的使用在 test 上用來 mock 行為或是 gevent 函式庫等地方。

延伸閱讀

  1. 源码分析之gevent monkey.patch_all实现原理
  2. What is monkey patching?
  3. Monkey-patching in Python: a magic trick or a powerful tool?

關於作者:
@kdchang 文藝型開發者,夢想是做出人們想用的產品和辦一所心目中理想的學校。A Starter, Software Engineer & Maker. JavaScript, Python & Arduino/Android lover.:)

(image via semaphoreci

喜歡我們的文章嗎?歡迎分享按讚給予我們支持和鼓勵!




訂閱 TechBridge Weekly 技術週刊,每週發送最精華的技術開發、產品設計的資訊給您


TechBridge Weekly 技術週刊編輯團隊

TechBridge Weekly 技術週刊團隊是一群對用技術改變世界懷抱熱情的團隊。本技術共筆部落格初期專注於Web前後端、行動網路、機器人/物聯網、資料科學與產品設計等技術分享。This is TechBridge Weekly Team Tech Blog, which focus on web, mobile, robot, IoT, Data Science technology sharing.

關於我們 / 技術日報 / 技術週刊 / 粉絲專頁 / 訂閱RSS

Comments