Python Monkey Patch 入門教學


Posted by KD Chang on 2018-07-14

 如何使用 Python Monkey Patch)

前言

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 函式庫等地方。

延伸閱讀

  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


#Python 猴子補丁 Monkey Patch









Related Posts

set MySQL global in GCP & search SQL

set MySQL global in GCP & search SQL

ES6 相關筆記

ES6 相關筆記

Day02 messenger、LINE、Telegram差異

Day02 messenger、LINE、Telegram差異


Sponsored



Newsletter




Comments