淺談我對python中的monkey patch
淺談我對python中的動態補丁:monkey patch的理解和應用。
最近也在幫助朋友處理一些問題的時候,對這個功能有有了進一步的瞭解。
monkey patch是從“游擊隊”的英文guerrilla裡轉變過來的,他表面的意思其實和使用者一點都不相關。他是一種處理機制,一種緊急的動態熱修補很好的方法。改動量小,處理比較快速,適合於線上需求快速變化而不動底層的解決方案。
在實際的運用中,經常會有呼叫底層類或者第三方包類時,對其功能不滿足,從而需要改寫的情況。這時候就可以對其進行patch。
Foo.get_sum = get_sum
Foo().get_sum
上面是對原類進行動態替換的一個簡單例子,我們可以改原來類,代價比較大,而且不單單是去改原類增加if else那麼簡單,我們需要對其進行分析抽象化,這才是對底層基類最合適的修改。
可能有人會問為什麼不做子類,繼承重新改方法。這是可行的,但是忽略了使用monkey patch的前提,儘可能的少改動程式碼,做動態的替換。
其實,解決這個問題有很多的方法,如果我來做,首選還是就是對基類重新分析進行改造,可以使用hook對這個case進行掛鉤處理。但是在最快的時間最簡單的處理模式,還是monkey patch合適一些。它對那些臨時提需求,想把各種效果看完而又不下單的客戶來說是性價格最高的解決方法。
儘管monkey patch還能做很多的事情,有些也超出我所掌握的範疇。但對今天所說的這個方面的使用者其實是有一點的排斥的,我們不能因為有了這個"貼膏藥"式的補救措施,就忽略了對模組架構的長遠佈局,“膏藥”越貼越多,邏輯也會越改越混亂,這些對於一個系統來說,它不會有任何的提升。反過來,我們對底層動手的時候就應該提前考慮他的通用性與擴充套件性,哪怕臨時做了補丁,後面穩定了也方便對底層進行更新。這才是一個優秀程式設計師的良知和義務。
相關文章
- 淺談對python pandas中 inplace 引數的理解Python
- 淺談python中的xpath用法Python
- 談談我對深拷貝和淺拷貝的理解
- 談談我對js中閉包的理解JS
- 淺談Python中的bs4基礎Python
- Python集合淺談Python
- 談談我對 Flutter 未來發展 和 “巢狀地獄” 的淺顯看法Flutter巢狀
- 談談我對Spring IOC的理解Spring
- 對Promise的深情,只好淺談Promise
- 淺談JavaScript中的thisJavaScript
- 淺談Python中的scrapy的安裝和建立工程。Python
- 淺談遊戲中臺——我眼中的supercell為何成功?遊戲
- 談談我對996.icu的看法996
- 談談我對服務化的理解
- 談一談我對Spring Resource的理解Spring
- 淺談Python基礎Python
- 淺談對java-GC的理解JavaGC
- 淺談react 中的 this 指向React
- 淺談Java中的HashmapJavaHashMap
- 淺談java中的反射Java反射
- 淺談React中的diffReact
- 談談我對服務網格的理解
- 淺談對標記永久化的理解
- [轉發]淺談我在職場中與人相處的技巧
- 談談對中斷的理解
- 淺談一下我瞭解的PWA
- 淺談Golang中select的用法Golang
- 淺談JavaScript中的繼承JavaScript繼承
- 淺談jQuery中的工具方法jQuery
- 淺談Kotlin中的函式Kotlin函式
- 淺談CSS中的Position(定位)CSS
- 淺談Rowid中的行號
- PHPer 淺談 Python 的資料結構PHPPython資料結構
- 淺談Android中LifecycleAndroid
- 淺談疫情對消費金融的影響
- 淺談色集中異色色對的匹配
- 淺談 js 中的 this 指向問題JS
- 淺談Swift中的函式式Swift函式