本文主要介紹了Python中創建自定義類時鴨子類型的基本定義、特點和應用場景,同時列舉了“file-like object“的例子對鴨子類型進行了說明。 ...
全網最適合入門的面向對象編程教程:17 類和對象的 Python 實現-鴨子類型與“file-like object“
摘要:
本文主要介紹了 Python 中創建自定義類時鴨子類型的基本定義、特點和應用場景,同時列舉了“file-like object“ 的例子對鴨子類型進行了說明。
原文鏈接:
往期推薦:
全網最適合入門的面向對象編程教程: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 並行計算
一個MicroPython的開源項目集錦:awesome-micropython,包含各個方面的Micropython工具庫
文檔和代碼獲取:
可訪問如下鏈接進行對文檔下載:
https://github.com/leezisheng/Doc
本文檔主要介紹如何使用 Python 進行面向對象編程,需要讀者對 Python 語法和單片機開發具有基本瞭解。相比其他講解 Python 面向對象編程的博客或書籍而言,本文檔更加詳細、側重於嵌入式上位機應用,以上位機和下位機的常見串口數據收發、數據處理、動態圖繪製等為應用實例,同時使用 Sourcetrail 代碼軟體對代碼進行可視化閱讀便於讀者理解。
相關示例代碼獲取鏈接如下:https://github.com/leezisheng/Python-OOP-Demo
正文
實際上對於 IsSerialConnected 函數來說,任何具有 RetSerialState 方法的對象都可以傳入,Python 中的這種多態通常稱為鴨子類型。
“如果它走像鴨子、游泳像鴨子,那麼它就是一隻鴨子”。我們不關心它是否真的是一隻(繼承自)鴨子,只需要知道它可以游泳或走路即可。鵝和天鵝很容易為我們提供鴨子一樣的行為,這允許我們在未來的設計中無須為水鳥們指定繼承關係就可以創建新的鳥類類型,同時也允許設計人員創建與初衷完全不同行為的類。例如,未來的設計人員可能創建一個會走路和游泳的企鵝類型,它同樣適用於相同的介面但設計人員完全沒有想過將其歸類為鴨子。
在鴨子類型中,重點關註的是對象的行為和方法,而不是對象的具體類型或類。如果一個對象具備特定的方法或屬性,那麼它就可以被視為擁有特定的類型,而不必顯式聲明或繼承該類型。這種方式允許 Python 在運行時動態確定對象的類型,從而使代碼更加靈活和簡潔。
Python 的“file-like object“就是一種鴨子類型。對真正的文件對象,它有一個 read()方法,返回其內容。但是,許多對象,只要有 read()方法,都被視為“file-like object“。許多函數接收的參數就是“file-like object“,你不一定要傳入真正的文件對象,完全可以傳入任何實現了 read()方法的對象。