全網最適合入門的面向對象編程教程:02 類和對象的Python實現-使用Python創建類

来源:https://www.cnblogs.com/FreakEmbedded/p/18270195
-Advertisement-
Play Games

本文主要介紹了串口通信協議的基本概念、串口通信的基本流程、如何使用 Python 語言創建一個類和類內成員中屬性和方法的定義。 ...


全網最適合入門的面向對象編程教程:02 類和對象的 Python 實現-使用 Python 創建類

摘要

本文主要介紹了串口通信協議的基本概念、串口通信的基本流程、如何使用 Python 語言創建一個類和類內成員中屬性和方法的定義。

正文

這裡開始,我們將以嵌入式中常用的串口通信協議為例,講解以下知識:

① 如何在 Python 中創建類和對象;

② 如何為 Python 對象添加屬性和行為;

③ 如何將類組織成包和模塊;

④ 如何限制外部訪問私有數據。

在使用 Python 進行編程之前,我們先回想一下平時我們是如何使用串口的。總結來說,無非就是下麵幾個步驟:

① 首先,我們需要確定要使用的串口號。

② 其次,配置波特率、數據位、奇偶校驗位、停止位、DTR/DSR、RTS/CTS 和 XON/XOFF。

③ 第三,打開串口。

④ 第四,收發數據。

⑤ 第五,關閉串口。

接下來,我們就來研究下用 Python 怎麼實現面對對象的串口操作。

在大多數編程語言中,類就是一組用來描述如何生成一個對象的代碼段,由於 Python 是動態語言,類是動態生成的。通過 class 關鍵字我們可以定義一個新的類型,class 之後為類的名稱並以冒號結尾:

_# 類名必須遵循標準的 Python 變數名準則_
_# 必須以字母或下畫線開頭,並只能由字母、下畫線或數字組成_
_# PEP 8標準建議類名應該用駝峰格式:_
_#   以大寫字母開頭,任意後續單詞都以大寫字母開頭_
class ClassName:
    pass

類的定義行後面是類的內容塊。和其他的 Python 代碼結構一樣,類也用縮進而非其他語言常用的大括弧或方括弧來界定。Python 中儘量用 4 個空格作為縮進。任何好用的代碼編輯器都支持將 Tab 鍵輸入替換為 4 個空格。由於示例中第一個類實際上什麼都不做,因此我們簡單地在第 2 行用 pass 關鍵字表示下麵沒有進一步的動作了。

class ClassName:
    pass

c = ClassName()
print(id(ClassName), type(ClassName), ClassName)
print(id(c), type(c), c)

image

這裡,我們使用 printf 函數輸出類和實例的相關信息。需要說明的是,在 Python,所有的數據類型,值,變數,函數,類,實例等等一切可操作的基本單元都使用對象(Object)表示。每個對象有三個基本屬性:ID,類型和值,也即有一塊記憶體中存儲了一個對象,這塊記憶體中一定存有這三個屬性。在以上的輸出中,我們可以看到在 Python 中定義一個新類(Class)等於創建了一個新類型(Type)的對象(Object),解釋器中一切對象均存儲在 PyObject 結構中。

示例中,我們定義了一個自己的類型 ClassName,c 是它的實例(Instance),它的類型是 main.ClassName。Class 和 Type 均是指類型(Type),Class 通常用於普通用戶使用 class 自定義的類型。Type 通常指 Python 的解釋器 CPython 內置的類型。

<__main__.ClassName object at 0x00000281CFD71190>

指明瞭當前實例 c 所處記憶體空間為 0x00000281CFD71190。

這裡,我們首先創建一個串口類 SerialClass:

_# 創建一個串口類_
class SerialClass:
    pass

但可以看到,我們並沒有定義類中任何東西,現在該怎麼操作呢,怎麼實現一個串口的收發功能呢?對於一個類而言,一般具有兩個成員:屬性和方法。用來描述具體某個對象的特征的是屬性,是靜態的,例如串口通信需要設置的一些參數,如波特率、數據位位數等。每個對象有它們自己的行為或者是使用它們的方法,比如串口發送數據、接收數據、設置通信參數等,我們把這些行為稱之為方法,是動態的,可以使用這些方法來操作一個對象。

關於如何為我們剛剛創建的串口類添加屬性和方法,我們下一節會講到。

文檔和代碼獲取

可訪問如下鏈接進行對文檔下載:

https://github.com/leezisheng/Doc

image

本文檔主要介紹如何使用 Python 進行面向對象編程,需要讀者對 Python 語法和單片機開發具有基本瞭解。相比其他講解 Python 面向對象編程的博客或書籍而言,本文檔更加詳細、側重於嵌入式上位機應用,以上位機和下位機的常見串口數據收發、數據處理、動態圖繪製等為應用實例,同時使用 Sourcetrail 代碼軟體對代碼進行可視化閱讀便於讀者理解。

相關示例代碼獲取鏈接如下:https://github.com/leezisheng/Python-OOP-Demo

image

往期推薦:

學嵌入式的你,還不會面向對象??!

全網最適合入門的面向對象編程教程:00 面向對象設計方法導論

全網最適合入門的面向對象編程教程:01 面向對象編程的基本概念

更多精彩內容可看:

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

一文搞懂 CM3 單片機調試原理

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

電子電腦類比賽的“武林秘籍”

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


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
一周排行
    -Advertisement-
    Play Games
  • 前言 推薦一款基於.NET 8、WPF、Prism.DryIoc、MVVM設計模式、Blazor以及MySQL資料庫構建的企業級工作流系統的WPF客戶端框架-AIStudio.Wpf.AClient 6.0。 項目介紹 框架採用了 Prism 框架來實現 MVVM 模式,不僅簡化了 MVVM 的典型 ...
  • 先看一下效果吧: 我們直接通過改造一下原版的TreeView來實現上面這個效果 我們先創建一個普通的TreeView 代碼很簡單: <TreeView> <TreeViewItem Header="人事部"/> <TreeViewItem Header="技術部"> <TreeViewItem He ...
  • 1. 生成式 AI 簡介 https://imp.i384100.net/LXYmq3 2. Python 語言 https://imp.i384100.net/5gmXXo 3. 統計和 R https://youtu.be/ANMuuq502rE?si=hw9GT6JVzMhRvBbF 4. 數 ...
  • 本文為大家介紹下.NET解壓/壓縮zip文件。雖然解壓縮不是啥核心技術,但壓縮性能以及進度處理還是需要關註下,針對使用較多的zip開源組件驗證,給大家提供個技術選型參考 之前在《.NET WebSocket高併發通信阻塞問題 - 唐宋元明清2188 - 博客園 (cnblogs.com)》講過,團隊 ...
  • 之前寫過兩篇關於Roslyn源生成器生成源代碼的用例,今天使用Roslyn的代碼修複器CodeFixProvider實現一個cs文件頭部註釋的功能, 代碼修複器會同時涉及到CodeFixProvider和DiagnosticAnalyzer, 實現FileHeaderAnalyzer 首先我們知道修 ...
  • 在軟體行業,經常會聽到一句話“文不如表,表不如圖”說明瞭圖形在軟體應用中的重要性。同樣在WPF開發中,為了程式美觀或者業務需要,經常會用到各種個樣的圖形。今天以一些簡單的小例子,簡述WPF開發中幾何圖形(Geometry)相關內容,僅供學習分享使用,如有不足之處,還請指正。 ...
  • 在 C# 中使用 RabbitMQ 通過簡訊發送重置後的密碼到用戶的手機號上,你可以按照以下步驟進行 1.安裝 RabbitMQ 客戶端庫 首先,確保你已經安裝了 RabbitMQ 客戶端庫。你可以通過 NuGet 包管理器來安裝: dotnet add package RabbitMQ.Clien ...
  • 1.下載 Protocol Buffers 編譯器(protoc) 前往 Protocol Buffers GitHub Releases 頁面。在 "Assets" 下找到適合您系統的壓縮文件,通常為 protoc-{version}-win32.zip 或 protoc-{version}-wi ...
  • 簡介 在現代微服務架構中,服務發現(Service Discovery)是一項關鍵功能。它允許微服務動態地找到彼此,而無需依賴硬編碼的地址。以前如果你搜 .NET Service Discovery,大概率會搜到一大堆 Eureka,Consul 等的文章。現在微軟為我們帶來了一個官方的包:Micr ...
  • ZY樹洞 前言 ZY樹洞是一個基於.NET Core開發的簡單的評論系統,主要用於大家分享自己心中的感悟、經驗、心得、想法等。 好了,不賣關子了,這個項目其實是上班無聊的時候寫的,為什麼要寫這個項目呢?因為我單純的想吐槽一下工作中的不滿而已。 項目介紹 項目很簡單,主要功能就是提供一個簡單的評論系統 ...