python模塊打補丁


先自定義兩個模塊,然后,我們調用模塊時,用打補丁方式,改寫mod_1.py模塊。為mod_2.py內容;其實這就相當於,在不改動mod_1.py模塊的前提下,打上補丁。

寫這個主要是gevent協程的時候,用到的monkey.patch_all()補丁,其實原理就是這樣。

mod_1.py 

mod_2.py

 第一種方法:

調用時實現補丁。

def monkey_patch_module_2():
    import sys
    import mod_1

    #mod_1.mod1_function() #print mod1_function

    sys.modules['mod_1'] = __import__("mod_2")

    import mod_1

    mod_1.mod2_function() #print mod2_function


monkey_patch_module_2()

結果輸出:

mod2_function

小結:從結果可以看出,我們已經把mod_1.py模塊,以補丁的形勢,替換到了mod_1.py中。

其實嚴格的說,不能算是打補丁,因為這里完全的把mod_1.py模塊的內容替換成了mod_2.py。

這也是在不改變系統原來的代碼或內置函數的情況下,來替成我們的代碼。注意,這是替換運行時的模塊內容。

 

第二種方法:

import mod_1
import mod_2
def mokey_patch_m_2():

    mod_1.__name__ = "mod_2" #此可有可無,但是防止亂,還是加上好。
    mod_1.mod1_function = mod_2.mod2_function

mokey_patch_m_2()
mod_1.mod1_function()

結果:

mod2_function

小結:從結果可以看出,mod_1模塊的mod1_function()輸出的是mod2_function的內容。

其實不難理解,我們就是在運行時,將mod_1.mod1_funcion對象,替換成mod2_function對象。

 

總結:至於這么做有什么用處,主要是在不改變原來的方法,但是又可以通過打補丁的方式,自定義一些功能。  到真正用的時候就你明白有什么用了。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM