全網最適合入門的物件導向程式設計教程:17 類和物件的Python實現-鴨子型別與“file-like object“

FreakStudio發表於2024-07-16

全網最適合入門的物件導向程式設計教程:17 類和物件的 Python 實現-鴨子型別與“file-like object“

摘要:

本文主要介紹了 Python 中建立自定義類時鴨子型別的基本定義、特點和應用場景,同時列舉了“file-like object“ 的例子對鴨子型別進行了說明。

原文連結:

FreakStudio的部落格

往期推薦:

學嵌入式的你,還不會物件導向??!

全網最適合入門的物件導向程式設計教程:00 物件導向設計方法導論

全網最適合入門的物件導向程式設計教程:01 物件導向程式設計的基本概念

全網最適合入門的物件導向程式設計教程:02 類和物件的 Python 實現-使用 Python 建立類

全網最適合入門的物件導向程式設計教程:03 類和物件的 Python 實現-為自定義類新增屬性

全網最適合入門的物件導向程式設計教程:04 類和物件的Python實現-為自定義類新增方法

全網最適合入門的物件導向程式設計教程:05 類和物件的Python實現-PyCharm程式碼標籤

全網最適合入門的物件導向程式設計教程:06 類和物件的Python實現-自定義類的資料封裝

全網最適合入門的物件導向程式設計教程:07 類和物件的Python實現-型別註解

全網最適合入門的物件導向程式設計教程:08 類和物件的Python實現-@property裝飾器

全網最適合入門的物件導向程式設計教程:09 類和物件的Python實現-類之間的關係

全網最適合入門的物件導向程式設計教程:10 類和物件的Python實現-類的繼承和里氏替換原則

全網最適合入門的物件導向程式設計教程:11 類和物件的Python實現-子類呼叫父類方法

全網最適合入門的物件導向程式設計教程:12 類和物件的Python實現-Python使用logging模組輸出程式執行日誌

全網最適合入門的物件導向程式設計教程:13 類和物件的Python實現-視覺化閱讀程式碼神器Sourcetrail的安裝使用

全網最適合入門的物件導向程式設計教程:全網最適合入門的物件導向程式設計教程:14 類和物件的Python實現-類的靜態方法和類方法

全網最適合入門的物件導向程式設計教程:15 類和物件的 Python 實現-__slots__魔法方法

全網最適合入門的物件導向程式設計教程:16 類和物件的Python實現-多型、方法重寫與開閉原則

更多精彩內容可看:

給你的 Python 加加速:一文速通 Python 平行計算

一文搞懂 CM3 微控制器除錯原理

肝了半個月,嵌入式技術棧大彙總出爐

電子計算機類比賽的“武林秘籍”

一個MicroPython的開源專案集錦:awesome-micropython,包含各個方面的Micropython工具庫

文件和程式碼獲取:

可訪問如下連結進行對文件下載:

https://github.com/leezisheng/Doc

image

本文件主要介紹如何使用 Python 進行物件導向程式設計,需要讀者對 Python 語法和微控制器開發具有基本瞭解。相比其他講解 Python 物件導向程式設計的部落格或書籍而言,本文件更加詳細、側重於嵌入式上位機應用,以上位機和下位機的常見串列埠資料收發、資料處理、動態圖繪製等為應用例項,同時使用 Sourcetrail 程式碼軟體對程式碼進行視覺化閱讀便於讀者理解。

相關示例程式碼獲取連結如下:https://github.com/leezisheng/Python-OOP-Demo

正文

實際上對於 IsSerialConnected 函式來說,任何具有 RetSerialState 方法的物件都可以傳入,Python 中的這種多型通常稱為鴨子型別

image

“如果它走像鴨子、游泳像鴨子,那麼它就是一隻鴨子”。我們不關心它是否真的是一隻(繼承自)鴨子,只需要知道它可以游泳或走路即可。鵝和天鵝很容易為我們提供鴨子一樣的行為,這允許我們在未來的設計中無須為水鳥們指定繼承關係就可以建立新的鳥類型別,同時也允許設計人員建立與初衷完全不同行為的類。例如,未來的設計人員可能建立一個會走路和游泳的企鵝型別,它同樣適用於相同的介面但設計人員完全沒有想過將其歸類為鴨子

在鴨子型別中,重點關注的是物件的行為和方法,而不是物件的具體型別或類。如果一個物件具備特定的方法或屬性,那麼它就可以被視為擁有特定的型別,而不必顯式宣告或繼承該型別。這種方式允許 Python 在執行時動態確定物件的型別,從而使程式碼更加靈活和簡潔。

Python 的“file-like object“就是一種鴨子型別。對真正的檔案物件,它有一個 read()方法,返回其內容。但是,許多物件,只要有 read()方法,都被視為“file-like object“。許多函式接收的引數就是“file-like object“,你不一定要傳入真正的檔案物件,完全可以傳入任何實現了 read()方法的物件。

image

相關文章