首頁歷史 > 正文

只能靠程式設計兼職維持生活了 - pluggy

2022-03-09由 AI測試前線 發表于 歷史

背景

瞭解過程式設計的人應該對函式重寫 ( 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

今天的學習內容是要用 pluggy 把當前專案裡的類和函式轉變為外掛,來代替函式重寫。

預估賞金:約 1500 人民幣。

任務拆解

一般在開始工作前需要將任務進行拆解,劃分成數個小任務。而這個任務,基本可以劃分為以下三步:

1。理解外掛的概念與設計;

2。學習 pluggy 的使用;

3。將目標類轉化為外掛。

於是在一頓廢寢忘食的編碼後……

只能靠程式設計兼職維持生活了 - pluggy

任務回顧

任務實際耗時在 15 個小時左右。

任務進行過程中,發現寫程式碼並不是最難的,難的是如何將當前專案的程式碼結構外掛化。過去的固化編碼思維讓我很難短時間想明白並作出實踐。大概在做了1、2次程式碼重構,推翻了1次原有程式碼後,才終於完成了這個任務。

有時候程式碼思維比程式碼更加重要。十分感謝這次學習讓我深刻理解了程式設計的另一種可能性。

期待下一個學習任務,也歡迎想要一起學習的小夥伴多多交流。

頂部