python 類詳解及簡(jiǎn)單實(shí)例
python 類詳解
類
1.類是一種數(shù)據(jù)結(jié)構(gòu),可用于創(chuàng)建實(shí)例。(一般情況下,類封裝了數(shù)據(jù)和可用于該數(shù)據(jù)的方法)
2.Python類是可調(diào)用的對(duì)象,即類對(duì)象
3.類通常在模塊的頂層進(jìn)行定義,以便類實(shí)例能夠在類所定義的源代碼文件中的任何地方被創(chuàng)建。
4.實(shí)例初始化
- instance = ClassName(args....)
- 類在實(shí)例化時(shí)可以使用__init__和__del__兩個(gè)特殊的方法。
class ClassName(base): 'class documentation string' #類文檔字符串 class suite #類體
- base:超類是一個(gè)或多個(gè)用于繼承的父類集合
- 類體可以包括:聲明語(yǔ)句、類成員定義、數(shù)據(jù)屬性、方法
- 如果類不存在繼承關(guān)系,就不提供括號(hào)里的base
class FirstClass(): spam = 30 #類數(shù)據(jù)屬性 def display(self): #類方法 print self.spam x = FirstClass() #創(chuàng)建類實(shí)例 x.display() #方法調(diào)用 >>> 30 dir(FirstClass) >>> ['__doc__', '__module__', 'display', 'spam']
- class語(yǔ)句類似def,是可執(zhí)行代碼;直到運(yùn)行class語(yǔ)句后,類才會(huì)創(chuàng)建
- class語(yǔ)句內(nèi),任何賦值語(yǔ)句都會(huì)創(chuàng)建類屬性
- 每個(gè)實(shí)例對(duì)象都會(huì)繼承類的屬性并獲得自己的名稱空間
Python類方法及調(diào)用
實(shí)例(對(duì)象)包含的屬性
- 可調(diào)用的屬性:方法
- 數(shù)據(jù)屬性
在OOP中,實(shí)例就像是帶有“數(shù)據(jù)”的記錄,而類是處理這些記錄的“程序”
- 通過(guò)實(shí)例調(diào)用方法相當(dāng)于調(diào)用所屬類的方法來(lái)處理當(dāng)前實(shí)例。 比如之前的代碼例子,x.display() 會(huì)被自動(dòng)轉(zhuǎn)換為 FirstClass.display(x),即調(diào)用類的方法來(lái)處理實(shí)例x
- 因此,類中每個(gè)方法必須有self參數(shù),它隱含當(dāng)前實(shí)例之意
- 在方法內(nèi)對(duì)self屬性做賦值運(yùn)算會(huì)產(chǎn)生每個(gè)實(shí)例自己的屬性
- Python規(guī)定,沒(méi)有實(shí)例,方法不允許被調(diào)用,這是‘綁定'(binding)的概念
- class語(yǔ)句中的賦值語(yǔ)句會(huì)創(chuàng)建類屬性,如前面例子的spam
- 在類方法中對(duì)傳給方法的特殊參數(shù)self進(jìn)行賦值會(huì)創(chuàng)建實(shí)例屬性
Python構(gòu)造器
創(chuàng)建實(shí)例時(shí),Python會(huì)自動(dòng)調(diào)用類中的__init__方法,以隱形的為實(shí)例提供屬性
- __init__方法被稱為構(gòu)造器
- 如果類中沒(méi)有定義__init__方法,實(shí)例創(chuàng)建之初僅僅是一個(gè)簡(jiǎn)單的名稱空間。
- __init__的第一個(gè)參數(shù)一定是self ,self 變量用于在類實(shí)例方法中引用方法所綁定的實(shí)例。因?yàn)榉椒ǖ膶?shí)例在任何方法調(diào)用中總是作為第一個(gè)參數(shù)傳遞的,self 被選中用來(lái)代表實(shí)例。你必須在方法聲明中放上 self,但可以在方法中不使用實(shí)例(self)。如果你的方法中沒(méi)有用到 self , 那么請(qǐng)考慮創(chuàng)建一個(gè)常規(guī)函數(shù),除非你有特別的原因。畢竟,你的方法代碼沒(méi)有使用實(shí)例,沒(méi)有與類關(guān)聯(lián)其功能,這使得它看起來(lái)更像一個(gè)常規(guī)函數(shù)。在其它面向?qū)ο笳Z(yǔ)言中,self 可能被稱為 this。
- __init__不能返回任何對(duì)象
- 析構(gòu)函數(shù):__del__
- 構(gòu)造函數(shù)是必要的,而析構(gòu)函數(shù)常常可以不考慮(Python解釋器會(huì)自己回收)
class MyClass(): def __init__(self, name): self.name = name print 'My name is ' + self.name def __del__(self): print self.name + ' is dead.' i1 = MyClass('Shaw') >>> My name is Shaw del i1 >>> Shaw id dead.
類的特殊屬性
- 使用dir()或__dict__,查看類或?qū)嵗膶傩?/li>
- __doc__:獲取文檔字符串
- __base__:獲取所有父類
- __module__:類所在的模塊
- __name__:實(shí)例所屬類的名字
Python類方法中可用的變量
- 實(shí)例變量:self.變量名
- 局部變量:方法內(nèi)部創(chuàng)建的變量,可直接使用
- 靜態(tài)變量:類中定義的變量。類名.變量名
- 全局變量:直接使用
繼承
繼承描述了基類的屬性如何‘遺傳'給派生類
- 子類可以繼承他的基類的任何屬性,包括數(shù)據(jù)屬性和方法
- 一個(gè)未指定基類的類,其默認(rèn)有一個(gè)叫object的基類
- Python允許多重繼承(可以繼承多個(gè)父類)
感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!
相關(guān)文章
用pandas中的DataFrame時(shí)選取行或列的方法
今天小編就為大家分享一篇用pandas中的DataFrame時(shí)選取行或列的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-07-07Python爬蟲(chóng)抓取代理IP并檢驗(yàn)可用性的實(shí)例
今天小編就為大家分享一篇Python爬蟲(chóng)抓取代理IP并檢驗(yàn)可用性的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-05-05Python使用pyinstaller打包spec文件的方法詳解
PyInstaller是一個(gè)用于將Python腳本打包成獨(dú)立的可執(zhí)行文件的工具,使用PyInstaller您可以將Python應(yīng)用程序轉(zhuǎn)換為可執(zhí)行文件,而無(wú)需用戶安裝Python解釋器或任何額外的庫(kù),這篇文章主要給大家介紹了關(guān)于Python使用pyinstaller打包spec文件的相關(guān)資料,需要的朋友可以參考下2024-08-08K近鄰法(KNN)相關(guān)知識(shí)總結(jié)以及如何用python實(shí)現(xiàn)
這篇文章主要介紹了K近鄰法(KNN)相關(guān)知識(shí)總結(jié)以及如何用python實(shí)現(xiàn),幫助大家更好的利用python實(shí)現(xiàn)機(jī)器學(xué)習(xí),感興趣的朋友可以了解下2021-01-01Python中的變量及簡(jiǎn)單數(shù)據(jù)類型應(yīng)用
這篇文章主要介紹了Python中的變量及簡(jiǎn)單數(shù)據(jù)類型應(yīng)用,簡(jiǎn)單的數(shù)據(jù)類型包括字符串和數(shù)字,更多詳細(xì)內(nèi)容,需要的小伙伴可以參考一下2022-03-03Python中使用PyHook監(jiān)聽(tīng)鼠標(biāo)和鍵盤事件實(shí)例
這篇文章主要介紹了Python中使用PyHook監(jiān)聽(tīng)鼠標(biāo)和鍵盤事件實(shí)例,這個(gè)庫(kù)依賴于另一個(gè)Python庫(kù)PyWin32,并且只能運(yùn)行在Windows平臺(tái),需要的朋友可以參考下2014-07-07用python打開(kāi)攝像頭并把圖像傳回qq郵箱(Pyinstaller打包)
這篇文章主要介紹了用python打開(kāi)攝像頭并把圖像傳回qq郵箱,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-05-05