全網最適合入門的物件導向程式設計教程:07 類和物件的 Python 實現-型別註解-提高程式碼可讀性的利器
摘要:
本文對型別註解的定義、使用原因進行了基本介紹,同時對使用 typing 模組實現型別提示和型別檢查進行了基本講解,透過使用型別註解可以讓開發者更清晰地瞭解函式和變數的預期型別。
往期推薦:
學嵌入式的你,還不會物件導向??!
全網最適合入門的物件導向程式設計教程:00 物件導向設計方法導論
全網最適合入門的物件導向程式設計教程:01 物件導向程式設計的基本概念
全網最適合入門的物件導向程式設計教程:02 類和物件的 Python 實現-使用 Python 建立類
全網最適合入門的物件導向程式設計教程:03 類和物件的 Python 實現-為自定義類新增屬性
全網最適合入門的物件導向程式設計教程:04 類和物件的Python實現-為自定義類新增方法
全網最適合入門的物件導向程式設計教程:05 類和物件的Python實現-PyCharm程式碼標籤
全網最適合入門的物件導向程式設計教程:06 類和物件的Python實現-自定義類的資料封裝
更多精彩內容可看:
給你的 Python 加加速:一文速通 Python 平行計算
一文搞懂 CM3 微控制器除錯原理
肝了半個月,嵌入式技術棧大彙總出爐
電子計算機類比賽的“武林秘籍”
一個MicroPython的開源專案集錦:awesome-micropython,包含各個方面的Micropython工具庫
文件和程式碼獲取
可訪問如下連結進行對文件下載:
FreakStudio-一文速通Python物件導向程式設計
本文件主要介紹如何使用 Python 進行物件導向程式設計,需要讀者對 Python 語法和微控制器開發具有基本瞭解。相比其他講解 Python 物件導向程式設計的部落格或書籍而言,本文件更加詳細、側重於嵌入式上位機應用,以上位機和下位機的常見串列埠資料收發、資料處理、動態圖繪製等為應用例項,同時使用 Sourcetrail 程式碼軟體對程式碼進行視覺化閱讀便於讀者理解。
相關示例程式碼獲取連結如下:
FreakStudio-一文速通Python物件導向程式設計-示例程式碼
正文
眾所周知,Python 是一門動態語言,當我們定義一個變數時,其資料型別可隨時改變,同樣的,當我們定義一個函式或類時,我們無法強制對傳入的變數規定其資料型別。而透過型別註解,我們可以實現型別提示和型別檢查,讓開發者更清晰地瞭解函式和變數的預期型別。
對於常用 C/C++ 的嵌入式工程師來說,Python 的函式呼叫可是有些頭疼,Python 是動態語言,其顯著特點是在宣告變數時,你不需要顯式宣告它的型別。儘管大部分時候你不用糾結型別宣告、型別轉化等麻煩事,可以用很少的程式碼完成各種騷操作,但是當你和其他成員協作程式設計時,你不希望你的函式被傳入錯誤型別的引數而引發不必要的麻煩。
這時,我們可以使用 Python 中的型別註解避免這種問題,其作用就是讓你可以明確的宣告變數的型別,使程式碼不再那麼的自由(放飛自我)。具體怎麼操作可以檢視官方文件:
typing 模組為 Python 帶來了型別提示和型別檢查的能力。它允許開發者在程式碼中新增型別註解,提高程式碼的可讀性和可維護性。typing
模組中有多種內建的型別別名,比如 List
、Tuple
、Dict
等,可以用於註解變數和函式的預期型別。我們可以透過 typing 模組對函式引數和返回值進行註解。
在我們的程式碼中 Serial 類的初始化方法中(類的定義可看上一篇文章),使用型別註解如下:
def __init__(self,
devport:str = "COM17",
devbaudrate:int = 115200,
devbytesize:int = serial.EIGHTBITS,
devparity :str = serial.PARITY_NONE,
devstopbits:int = serial.STOPBITS_ONE):
pass
此時,型別註解能夠提供給編輯器進行型別檢查的機會,但需要注意,也僅僅起提示的作用,對 Python 程式的執行不會產生任何影響。也就是說,Python 跟以前一樣自由,即使你進行了錯誤的型別賦值,只要不直接引發錯誤,程式依舊可以執行。
這裡,我們使用錯誤的型別給 devport 賦值,可以看到 Pycharm 進行提示:
那麼,如何使得我們對函式進行了錯誤型別賦值時,程式發出提示並精確定位錯誤的程式碼行?這些在之後的異常類中會講到。