全網最適合入門的面向對象編程教程: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
  • 通過WPF的按鈕、文本輸入框實現了一個簡單的SpinBox數字輸入用戶組件並可以通過數據綁定數值和步長。本文中介紹了通過Xaml代碼實現自定義組件的佈局,依賴屬性的定義和使用等知識點。 ...
  • 以前,我看到一個朋友在對一個系統做初始化的時候,通過一組魔幻般的按鍵,調出來一個隱藏的系統設置界面,這個界面在常規的菜單或者工具欄是看不到的,因為它是一個後臺設置的關鍵界面,不公開,同時避免常規用戶的誤操作,它是作為一個超級管理員的入口功能,這個是很不錯的思路。其實Winform做這樣的處理也是很容... ...
  • 一:背景 1. 講故事 前些天有位朋友找到我,說他的程式每次關閉時就會自動崩潰,一直找不到原因讓我幫忙看一下怎麼回事,這位朋友應該是第二次找我了,分析了下 dump 還是挺經典的,拿出來給大家分享一下吧。 二:WinDbg 分析 1. 為什麼會崩潰 找崩潰原因比較簡單,用 !analyze -v 命 ...
  • 在一些報表模塊中,需要我們根據用戶操作的名稱,來動態根據人員姓名,更新報表的簽名圖片,也就是電子手寫簽名效果,本篇隨筆介紹一下使用FastReport報表動態更新人員簽名圖片。 ...
  • 最新內容優先發佈於個人博客:小虎技術分享站,隨後逐步搬運到博客園。 創作不易,如果覺得有用請在Github上為博主點亮一顆小星星吧! 博主開始學習編程於11年前,年少時還只會使用cin 和cout ,給單片機點點燈。那時候,類似async/await 和future/promise 模型的認知還不是 ...
  • 之前在阿裡雲ECS 99元/年的活動實例上搭建了一個測試用的MINIO服務,以前都是直接當基礎設施來使用的,這次準備自己學一下S3相容API相關的對象存儲開發,因此有了這個小工具。目前僅包含上傳功能,後續計劃開發一個類似圖床的對象存儲應用。 ...
  • 目錄簡介快速入門安裝 NuGet 包實體類User資料庫類DbFactory增刪改查InsertSelectUpdateDelete總結 簡介 NPoco 是 PetaPoco 的一個分支,具有一些額外的功能,截至現在 github 星數 839。NPoco 中文資料沒多少,我是被博客園群友推薦的, ...
  • 前言 前面使用 Admin.Core 的代碼生成器生成了通用代碼生成器的基礎模塊 分組,模板,項目,項目模型,項目欄位的基礎功能,本篇繼續完善,實現最核心的模板生成功能,並提供生成預覽及代碼文件壓縮下載 準備 首先清楚幾個模塊的關係,如何使用,簡單畫一個流程圖 前面完成了基礎的模板組,模板管理,項目 ...
  • 假設需要實現一個圖標和文本結合的按鈕 ,普通做法是 直接重寫該按鈕的模板; 如果想作為通用的呢? 兩種做法: 附加屬性 自定義控制項 推薦使用附加屬性的形式 第一種:附加屬性 創建Button的附加屬性 ButtonExtensions 1 public static class ButtonExte ...
  • 在C#中,委托是一種引用類型的數據類型,允許我們封裝方法的引用。通過使用委托,我們可以將方法作為參數傳遞給其他方法,或者將多個方法組合在一起,從而實現更靈活的編程模式。委托類似於函數指針,但提供了類型安全和垃圾回收等現代語言特性。 基本概念 定義委托 定義委托需要指定它所代表的方法的原型,包括返回類 ...