徹底搞懂Python中的類
Python類的定義
Python 中定義一個類使用 class 關鍵字實現,其基本語法格式如下:
class 類名: 多個(≥0)類屬性... 多個(≥0)類方法...
注意,無論是類屬性還是類方法,對於類來說,它們都不是必需的,可以有也可以沒有。另外,Python 類中屬性和方法所在的位置是任
意的,即它們之間並沒有固定的前後次序。
和變數名一樣,類名本質上就是一個識別符號,因此我們在給類起名字時,必須讓其符合 Python 的語法。有讀者可能會問,用 a、b、c 作
為類的類名可以嗎?從 Python 語法上講,是完全沒有問題的,但作為一名合格的程式設計師,我們必須還要考慮程式的可讀性。
因此,在給類起名字時,最好使用能代表該類功能的單詞,例如用“Student”作為學生類的類名;甚至如果必要,可以使用多個單片語
合而成,例如初學者定義的第一個類的類名可以是“TheFirstDemo”。
注意,如果由單詞構成類名,建議每個單詞的首字母大寫,其它字母小寫。
給類起好名字之後,其後要跟有冒號(:),表示告訴 Python 直譯器,下面要開始設計類的內部功能了,也就是編寫類屬性和類方法。
其實,類屬性指的就是包含在類中的變數;而類方法指的是包含類中的函式。換句話說,類屬性和類方法其實分別是包含類中的變數和函
數的別稱。需要注意的一點是,同屬一個類的所有類屬性和類方法,要保持統一的縮排格式,通常統一縮排 4 個空格。
透過上面的分析,可以得出這樣一個結論,即 Python 類是由類頭(class 類名)和類體(統一縮排的變數和函式)構成。例如,下面程
序定義一個 TheFirstDemo 類:
class TheFirstDemo: '''這是一個學習Python定義的第一個類''' # 下面定義了一個類屬性 add = '' # 下面定義了一個say方法 def say(self, content): print(content)
和函式一樣,我們也可以為類定義說明文件,其要放到類頭之後,類體之前的位置,如上面程式中第二行的字串,就是 TheFirstDemo
這個類的說明文件。
另外分析上面的程式碼可以看到,我們建立了一個名為 TheFirstDemo 的類,其包含了一個名為 add 的類屬性。注意,根據定義屬性位置
的不同,在各個類方法之外定義的變數稱為類屬性或類變數(如 add 屬性),而在類方法中定義的屬性稱為例項屬性(或例項變數),
它們的區別和用法可閱讀《Python類變數和例項變數》一節。
同時,TheFirstDemo 類中還包含一個 say() 類方法,細心的讀者可能已經看到,該方法包含兩個引數,分別是 self 和 content。可以肯
定的是,content 引數就只是一個普通引數,沒有特殊含義,但 self 比較特殊,並不是普通的引數,它的作用會在後續章節中詳細介紹。
更確切地說,say() 是一個例項方法,除此之外,Python 類中還可以定義類方法和靜態方法,這 3 種類方法的區別和具體用法,可閱讀
《Python例項方法、靜態方法和類方法》。
事實上,我們完全可以建立一個沒有任何類屬性和類方法的類,換句話說,Python 允許建立空類,例如:
class Empty: pass
可以看到,如果一個類沒有任何類屬性和類方法,那麼可以直接用 pass 關鍵字作為類體即可。但在實際應用中,很少會建立空類,因為
空類沒有任何實際意義。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/3407/viewspace-2834226/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 徹底搞懂Python 中的 import 與 from importPythonImport
- 徹底搞懂 Kubernetes 中的 Events
- 徹底搞懂JavaScript中的繼承JavaScript繼承
- 徹底搞懂徹底搞懂事件驅動模型 - Reactor事件模型React
- 徹底搞懂 python 中文亂碼問題Python
- 徹底搞懂https原理HTTP
- 徹底搞懂Bean載入Bean
- 徹底搞懂JavaScript作用域JavaScript
- 徹底搞懂 Git-RebaseGit
- 徹底搞懂HTTPS的加密機制HTTP加密
- 深入JavaScript系列(四):徹底搞懂thisJavaScript
- 一文徹底搞懂BERT
- 徹底搞懂 Channel 實現原理
- 徹底搞懂IO多路複用
- 徹底掌握Python中 * 號Python
- 徹底搞懂Scrapy的中介軟體(二)
- 徹底搞懂Scrapy的中介軟體(一)
- 徹底搞懂Object和Function的關係ObjectFunction
- 徹底搞懂Scrapy的中介軟體(三)
- 天啦嚕!僅僅5張圖,徹底搞懂Python中的深淺拷貝Python
- 面試必備|帶你徹底搞懂Python生成器面試Python
- 徹底搞懂JavaScript原型和原型鏈JavaScript原型
- 看完讓你徹底搞懂Websocket原理Web
- 兩張圖徹底搞懂MyBatis的Mapper原理!MyBatisAPP
- 徹底搞懂容器技術的基石: namespace (下)namespace
- 來吧,一文徹底搞懂Java中的Comparable和ComparatorJava
- 從原理到實戰,徹底搞懂NginxNginx
- Flutter(五)之徹底搞懂Dart非同步FlutterDart非同步
- 徹底搞懂原型、原型鏈和繼承原型繼承
- 徹底搞懂瀏覽器Event-loop瀏覽器OOP
- 兩萬字長文,徹底搞懂Kafka!Kafka
- 徹底搞懂Composer自動載入原理
- 這一次,徹底搞懂 Go CondGo
- 徹底搞懂 MySQL 事務的隔離級別MySql
- 幫你徹底搞懂JS中的prototype、__proto__與constructor(圖解)JSStruct圖解
- 徹底搞懂Node.js中exports與module.exports的區別Node.jsExport
- 幫你徹底搞懂JS中的prototype、__proto__與constructor(圖解)(轉)JSStruct圖解
- 這篇文章讓你徹底搞懂ES6中的Class(全面解析)