2023-12-05|閱讀時間 ‧ 約 3 分鐘

【💊 Python的解憂錦囊】typing模組 - 自由彈性之下帶點引導的TypedDict



我們在使用Python語言進行軟體開發時, 常常會需要dict這個資料結構來儲存複雜結構的資料, 就如同JSON一般, 我們會具有這樣的Key/Value模式組成的資料結構, 如下圖:

而當我們在Python的世界裡, 除了嚴謹規範資料欄位的@dataclass之外, 更常使用的就是「dict」了, 我們會自由寬鬆的使用dict來動態增加特定的Key值與Value值, 如同下方:

mydict = {}
mydict['新的key值'] = '新的value值'

這樣雖然靈活彈性又方便, 但由於沒有預先規範可用的鍵值範圍, 常常會使得後續的維護者無從下手, 假設文檔又不是非常詳盡時, 若原始開發者還在團隊之中當然可以請教沒問題, 但假若原作者已經難以聯繫時, 那麼勢必會帶來極大的負擔, 光是閱讀這些代碼相信就花費不少時間了,更何況是後續的維護與開發呢?

為了減少這樣的狀況發生, 我們在使用Python的Dict時若能帶有一些基本欄位的規範時, 相信後續的維護者就能夠Follow這樣的規範進行修改, 而且也能夠保留原始Dict的彈性,那究竟要怎麼達到這樣的目的呢? 答案就是typing模組裡面的TypedDict。

如何使用?

先約定規範政策

# 從typing引入TypedDict
from typing import TypedDict

# 使用class FuncParams繼承自TypedDict
class Params(TypedDict):
# 關於a的參數代表的含意...
a: str

# 關於b的參數代表的含意...
b: str

# 關於c的參數代表的含意...
c: str

# 關於d的參數代表的含意...
d: str

# 關於e的參數代表的含意...
e: str

盡情享受提示帶來的好處

編輯器VSCode則可以根據TypeDict的宣告來提示我們可以使用的Kye值。



但並非強制規範



我們除了上述提示的Key值可以使用之外, 也可以自行擴充欄位, 但通常不會建議這麼做, 而是應該在原本的class之中加入新的欄位並註解說明, 未來其他開發者進行維護時也會比較容易上手, 減少認知上的錯誤。

# 底下我們新增一個「f」的欄位, 此時可以正常運行不會發生錯誤。
params: Params = {'f': 'f'}

print(params)

結語

靈活彈性的Dict固然方便, 但一個永續發展的系統軟體應該要能夠容易維護, 因此我們如果可以的話, 應該加入一點指引或者規範才能夠讓系統軟體的開發持續發展下去, 也替我們自己減少不必要的麻煩。

分享至
成為作者繼續創作的動力吧!
© 2024 vocus All rights reserved.