前言
Python 是近來十分火紅的程式語言,不管是網站開發、遊戲開發或是資料科學都可以看見 Python 的身影,本系列文章將透過複習 Python 小 tips,讓讀者可以重新認識 Python。這次我們先來認識一下 Monkey Patch 這個程式設計上的小技巧。
什麼是 Monkey Patch
簡單來說,Monkey Patch 就是在 run time 時動態更改 class 或是 module 已經定義好的函數或是屬性內容。實務上常見的使用在 test 上用來 mock 行為或是 gevent 函式庫等。
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()
字串,
# monkey.py
class MyClass:
def f(self):
print 'f()'
此時我們在另外一個 main.py 檔案引入 monkey module,並替換掉 f function 為 monkey_f,這樣定義的出來的 instance 呼叫方法 f() 印出的則為 monkey_f()
# 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 函式庫等地方。
延伸閱讀
- 源码分析之gevent monkey.patch_all实现原理
- What is monkey patching?
- 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)