全網最適合入門的面向對象編程教程: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 MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...