全網最適合入門的面向對象編程教程:14 類和對象的 Python 實現-類的靜態方法和類方法,你分得清嗎?

全網最適合入門的面向對象編程教程:14 類和對象的 Python 實現-類的靜態方法和類方法,你分得清嗎?

摘要:

本文主要介紹了Python中類和對象中的類方法和靜態方法,以及類方法和靜態方法的定義、特點、應用場景和使用方法,并對二者進行對比。

原文鏈接:

FreakStudio 的博客

往期推薦:

可能是全網最適合入門的面向對象編程教程:Python實現-嵌入式愛好者必看!

全網最適合入門的面向對象編程教程: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 的安裝使用

更多精彩內容可看:

CM3調試系統簡析

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

比賽獲獎的武林秘籍:05 電子計算機類比賽國獎隊伍技術如何分工和學習內容

比賽獲獎的武林秘籍:04 電子類比賽嵌入式開發快速必看的上手指南

比賽獲獎的武林秘籍:03 好的創意選取-獲得國獎的最必要前提

比賽獲獎的武林秘籍:02 國獎秘籍-大學生電子計算機類競賽快速上手的流程,小白必看

比賽獲獎的武林秘籍:01 如何看待當代大學生競賽中“卷”“祖傳老項目”“找關系”的現象?

比賽獲獎的武林秘籍:00 學科競賽-工科類大學生繞不開的話題,你了解多少?

電子計算機類比賽的“武林秘籍”-電賽光電設計大賽計算機設計大賽嵌入式芯片與系統設計競賽,你要的都在這里!

文檔和代碼獲取:

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

https://github.com/leezisheng/Doc

image

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

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

正文

靜態方法

以 SensorClass 類為例,所謂 InitSensor、StartSensor、StopSensor 等在類中定義的方法都是對象方法,也就是說這些方法都是發送給對象的消息,都調用了對象中的屬性。實際上,我們寫在類中的方法并不需要都是對象方法,類中有一些方法不需要調用對象屬性,就比如在 InitSensor 方法中我們可能需要判斷當前 COM 口是否存在,很顯然這個方法與傳感器對象無關。

又比如,我們定義一個“三角形”類,通過傳入三條邊長來構造三角形,并提供計算周長和面積的方法,但是傳入的三條邊長未必能構造出三角形對象,因此我們可以先寫一個方法來驗證三條邊長是否可以構成三角形,這個方法很顯然就不是對象方法,因為在調用這個方法時三角形對象尚未創建出來(因為都不知道三條邊能不能構成三角形),所以這個方法是屬于三角形類而并不屬于三角形對象的。我們可以使用靜態方法來解決這類問題,代碼如下所示。

@staticmethod_# 判斷傳感器ID號是否正確:這里判斷ID號是否在0到99之間_def IsTrueID(id:int = 0):if id >= 0 and id <= 99:return Trueelse:return False

靜態方法,其實就是我們學過的函數,和函數唯一的區別是,靜態方法定義在類這個空間(類命名空間)中,而函數則定義在程序所在的空間(全局命名空間)中。靜態方法沒有類似 self、cls 這樣的特殊參數,因此 Python 解釋器不會對它包含的參數做任何類或對象的綁定。也正因為如此,類的靜態方法中無法調用任何類屬性和類方法。這里我們定義了 IsPort 靜態方法判斷傳感器 ID 號是否正確,靜態方法需要使用@staticmethod 修飾。靜態方法的調用,既可以使用類名,也可以使用類對象,例如:

_    # 設置ID號_id = 1
_    # 判斷ID號是否符合格式_if SensorClass.IsTrueID(id):s = SensorClass()else:print("Sensor Init False")

image

類方法

和靜態方法比較類似,Python 還可以在類中定義類方法,類方法的第一個參數約定名為 cls,它代表的是當前類相關的信息的對象(類本身也是一個對象,有的地方也稱之為類的元數據對象),通過這個參數我們可以獲取和類相關的信息并且可以創建出類的對象,Python 會自動將類本身綁定給 cls 參數(注意,綁定的不是類對象)。也就是說,我們在調用類方法時,無需顯式為 cls 參數傳參。

類方法需要使用@classmethod 修飾符進行修飾,我們在 MasterClass 中定義類方法 MasterInfo 示例代碼如下:

@classmethoddef MasterInfo(cls):print("Info : "+str(cls))print(MasterClass.MasterInfo())

image

在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/45079.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/45079.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/45079.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

網安防御保護-小實驗

1、DMZ區內的服務器&#xff0c;辦公區僅能在辦公時間內(9:00-18:00)可以訪問&#xff0c;生產區的設備全天可以訪問 2、生產區不允許訪問互聯網&#xff0c;辦公區和游客區允許訪問互聯網 3、辦公區設備10.0.2.10不允許訪問DMZ區的FTP服務器和HTTP服務器&#xff0c;僅能ping通…

vue 環境變量那些事

常見的項目環境變量的使用 總則&#xff1a;使用 .env.環境名字文件去定義&#xff0c;運行命令的時候指定環境 比如&#xff1a;.env 代表所有環境變量使用的一些變量 .env.development 代表的開發環境變量 .env.production 代表的生產環境變量也就是上線以后使用的 vitevu…

自主研發接口測試框架

測試任務&#xff1a;將以前完成的所有的腳本統一改寫為unitest框架方式 1、需求原型 1.1 框架目錄結構 V1.0&#xff1a;一般的設計思路分為配置層、腳本層、數據層、結果層&#xff0c;如下圖所示 V 2.0&#xff1a;加入驅動層testdriver 1.2 框架各層需要完成的工作 1、配…

Fast DDS library windows 下源碼編譯(cmake)

目錄 編譯環境&#xff1a; 編譯需要的源碼文件&#xff1a; Fast DDS編譯&#xff1a; 注意事項&#xff1a; 參考文檔&#xff1a; 基于Fast DDS 的源碼來編譯相關的庫&#xff0c;然后可以通過python 來調用庫文件實現dds 數據通信&#xff0c;本文就詳細的介紹編譯過程…

機器學習筑基篇,容器調用顯卡計算資源,Ubuntu 24.04 快速安裝 NVIDIA Container Toolkit!...

[ 知識是人生的燈塔,只有不斷學習,才能照亮前行的道路 ] Ubuntu 24.04 安裝 NVIDIA Container Toolkit 什么是 NVIDIA Container Toolkit? 描述:NVIDIA Container Toolkit(容器工具包)使用戶能夠構建和運行 GPU 加速的容器,該工具包括一個容器運行時庫和實用程序,用于自動…

石油巨頭受沖擊!埃克森美孚、BP接連發出盈利預警

KlipC報道&#xff1a;近日&#xff0c;BP&#xff08;英國石油&#xff09;預計其第二季度將面臨10億至20億美元的減值費用&#xff0c;并發出警告稱其煉油利潤率“大幅下降”&#xff0c;石油交易收益預計出現疲軟。消息公布后&#xff0c;其股價下跌超4%。 由于中間餾分油利…

JavaScript(8)——函數

函數 function,是被設計執行特定任務的代碼塊。 函數可以把具有相同或相似邏輯的代碼包裹起來&#xff0c;通過函數調用執行這些代碼&#xff0c;這么做的優勢有利于精簡代碼方便復用。類似于alert(),prompt()和console.log()&#xff0c;這些都是js函數&#xff0c;不過已經…

STL(一)

書寫形式&#xff1a;string (const string& str, size_t pos, size_t len npos); 舉例&#xff1a; int main(){ string url("https://mp.csdn.net/mp_blog/creation/editor?spm1000.2115.3001.4503") string sub1(url,0,5);//從下標為0開始向后5個字符&…

如何在 Python 中創建一個類似于 MS 計算器的 GUI 計算器

問題背景 假設我們需要創建一個類似于微軟計算器的 GUI 計算器。這個計算器應該具有以下功能&#xff1a; 能夠顯示第一個輸入的數字。當按下運算符時&#xff0c;輸入框仍顯示第一個數字。當按下第二個數字時&#xff0c;第一個數字被替換。 解決方案 為了解決這個問題&am…

華為OD機考題(HJ108 求最小公倍數)

前言 經過前期的數據結構和算法學習&#xff0c;開始以OD機考題作為練習題&#xff0c;繼續加強下熟練程度。 描述 正整數A和正整數B 的最小公倍數是指 能被A和B整除的最小的正整數值&#xff0c;設計一個算法&#xff0c;求輸入A和B的最小公倍數。 數據范圍&#xff1a;1≤…

Spring中的適配器模式和策略模式

1. 適配器模式的應用 1.1適配器模式&#xff08;Adapter Pattern&#xff09;的原始定義是&#xff1a;將一個類的接口轉換為客戶期望的另一個接口&#xff0c;適配器可以讓不兼容的兩個類一起協同工作。 1.2 AOP中的適配器模式 在Spring的AOP中&#xff0c;使用Advice&#…

【北京迅為】《i.MX8MM嵌入式Linux開發指南》-第一篇 嵌入式Linux入門篇-第十九章 Linux 工具之make 工具和 makefile 文件

i.MX8MM處理器采用了先進的14LPCFinFET工藝&#xff0c;提供更快的速度和更高的電源效率;四核Cortex-A53&#xff0c;單核Cortex-M4&#xff0c;多達五個內核 &#xff0c;主頻高達1.8GHz&#xff0c;2G DDR4內存、8G EMMC存儲。千兆工業級以太網、MIPI-DSI、USB HOST、WIFI/BT…

集群管理腳本

虛擬機集群管理腳本 文章目錄 虛擬機集群管理腳本一、遠程調用腳本(remote_call.sh)二、遠程復制目錄腳本(remote_copy.sh) 一、遠程調用腳本(remote_call.sh) 如果有傳命令參數&#xff0c;則執行該命令&#xff1b;如果沒有傳命令參數&#xff0c;則不執行。 #!/bin/bashcm…

【嵌入式Linux】<知識點> GDB調試(更新中)

文章目錄 前言 一、GDB調試預備工作 二、GDB的啟動與退出 三、GDB中查看源代碼 四、GDB斷點操作 五、GDB調試指令 前言 在專欄【嵌入式Linux】應用開發篇_Linux打工仔的博客中&#xff0c;我們已經寫了大量的源程序。但是在調試這些程序時我們都是通過printf大法和肉眼除…

評估指標:精確率(Precision)、召回率(Recall)、F1分數(F1 Score)

評估指標&#xff1a;精確率&#xff08;Precision&#xff09;、召回率&#xff08;Recall&#xff09;、F1分數&#xff08;F1 Score&#xff09; 前言相關介紹1. 準確率&#xff08;Accuracy&#xff09;2. 精確率&#xff08;Precision&#xff09;3. 召回率&#xff08;Re…

Cadence23打開與關閉飛線,修改位號絲印大小

打開與關閉所有飛線&#xff1a; 顯示部分飛線&#xff1a; 單獨顯示網絡飛線尤為好用&#xff0c;點擊上圖中的網絡&#xff0c;之后鼠標點擊器件中你想高亮的網絡即可單獨打開部分飛線。 這里的關閉部分網絡的飛線也很好用&#xff0c;可以臨時關閉討厭的GND飛線&#xff1a…

掌握Postman的API請求模板:一鍵生成,效率倍增

&#x1f4d8; 掌握Postman的API請求模板&#xff1a;一鍵生成&#xff0c;效率倍增 Postman是API開發和測試的瑞士軍刀&#xff0c;而其請求模板功能更是提升工作效率的利器。API請求模板允許用戶定義一組可重用的請求配置&#xff0c;從而快速生成和發送API請求。本文將深入…

virturalBox+K8S部署jaeger-all-in-one

pod的yaml如下&#xff1a;這里使用的是主機host模式 apiVersion: apps/v1 kind: Deployment metadata:name: jaegerlabels:app: jaeger spec:replicas: 1selector:matchLabels:app: jaegertemplate:metadata:labels:app: jaegerspec:hostNetwork: truecontainers:- name: jae…

TF卡病毒是什么?如何防范和應對?

在存儲芯片及存儲卡領域&#xff0c;TF卡病毒是一個備受關注的話題。在本文中&#xff0c;拓優星辰將詳細解釋TF卡病毒的含義、來源以及如何防范和應對這一問題&#xff0c;幫助客戶更好地了解和處理TF卡病毒的風險。 1. TF卡病毒的含義 TF卡病毒是指針對TF存儲卡&#xff08;T…

05:定時器中斷

中斷 1、定時器T0中斷2、案例&#xff1a;通過定時器T0中斷來實現燈間隔1s亮滅 1、當中央處理機CPU正在處理某件事的時候外界發生了緊急事件請求&#xff0c;要求CPU暫停當前的工作&#xff0c;轉而去處理這個緊急事件&#xff0c;處理完以后&#xff0c;再回到原來被中斷的地方…