只能靠程式設計兼職維持生活了 - pluggy
背景
瞭解過程式設計的人應該對函式重寫 ( override ) 不陌生,但其實,這個普適的方法並不適用於所有的應用場景。舉個簡單的例子,當多個專案程式碼貢獻方都想參與同一程式的修改時,
頻繁的函式重寫會使程式碼變得異常混亂,讓整個專案變得難以維護。
那麼,有沒有更優雅的方法能夠兼顧程式碼的擴充套件性與穩定性呢?
有的,pytest ( python 單元測試框架 ) 的作者就意識到了這個問題。在其原始碼中,可以發現許多經過
@pytest.hookimpl
關鍵字裝飾的函式,這代表這個函式是一個外掛的實現,
其作用是透過用外掛呼叫的形式來替代函式重寫。
。
pytest 部分原始碼:
@pytest。hookimpl(hookwrapper=True)def pytest_load_initial_conftests(early_config: Config): ns = early_config。known_args_namespace if ns。capture == “fd”: _py36_windowsconsoleio_workaround(sys。stdout) _colorama_workaround() _readline_workaround() pluginmanager = early_config。pluginmanager capman = CaptureManager(ns。capture) pluginmanager。register(capman, “capturemanager”) # make sure that capturemanager is properly reset at final shutdown early_config。add_cleanup(capman。stop_global_capturing) # finally trigger conftest loading but while capturing (issue93) capman。start_global_capturing() outcome = yield capman。suspend_global_capture() if outcome。excinfo is not None: out, err = capman。read_global_capture() sys。stdout。write(out) sys。stderr。write(err)
早前在 pytest 中這只是一個外掛工具庫,而隨著這個庫的日益發展, 作者把它從 pytest 中分離了出來,並將其命名為了
pluggy
。
賞金任務
今天的學習內容是要用 pluggy 把當前專案裡的類和函式轉變為外掛,來代替函式重寫。
預估賞金:約 1500 人民幣。
任務拆解
一般在開始工作前需要將任務進行拆解,劃分成數個小任務。而這個任務,基本可以劃分為以下三步:
1。理解外掛的概念與設計;
2。學習 pluggy 的使用;
3。將目標類轉化為外掛。
於是在一頓廢寢忘食的編碼後……
任務回顧
任務實際耗時在 15 個小時左右。
任務進行過程中,發現寫程式碼並不是最難的,難的是如何將當前專案的程式碼結構外掛化。過去的固化編碼思維讓我很難短時間想明白並作出實踐。大概在做了1、2次程式碼重構,推翻了1次原有程式碼後,才終於完成了這個任務。
有時候程式碼思維比程式碼更加重要。十分感謝這次學習讓我深刻理解了程式設計的另一種可能性。
期待下一個學習任務,也歡迎想要一起學習的小夥伴多多交流。