佳木斯湛栽影视文化发展公司

主頁(yè) > 知識(shí)庫(kù) > 一篇文章帶你搞懂Python類的相關(guān)知識(shí)

一篇文章帶你搞懂Python類的相關(guān)知識(shí)

熱門標(biāo)簽:百度AI接口 電話運(yùn)營(yíng)中心 語(yǔ)音系統(tǒng) 企業(yè)做大做強(qiáng) 硅谷的囚徒呼叫中心 Win7旗艦版 呼叫中心市場(chǎng)需求 客戶服務(wù)

一、什么是類

類(class),作為代碼的父親,可以說(shuō)它包裹了很多有趣的函數(shù)和方法以及變量,下面我們?cè)囍?jiǎn)單創(chuàng)建一個(gè)吧。

這樣就算創(chuàng)建了我們的第一個(gè)類了。大家可以看到這里面有一個(gè)self,其實(shí)它指的就是類aa的實(shí)例。每個(gè)類中的函數(shù)只要你不是類函數(shù)或者靜態(tài)函數(shù)你都得加上這個(gè)self,當(dāng)然你也可以用其他的代替這個(gè)self,只不過(guò)這是python中的寫法,就好比Java 中的this。

二、類的方法

1.靜態(tài)方法,類方法,普通方法

類一般常用有三種方法,即為static method(靜態(tài)方法),class method(類方法)和self(普通方法)。下面我們來(lái)看看他們之間的區(qū)別吧。

從這里可以看出我們的三種方法有一個(gè)共同點(diǎn),那就是既可以在實(shí)例中訪問(wèn),也可以直接用類訪問(wèn)。不同的是,類實(shí)例訪問(wèn)時(shí)是不會(huì)執(zhí)行init方法的,也就是沒(méi)有進(jìn)行初始化。如果用類直接訪問(wèn),可以清楚看到它的運(yùn)行軌跡。如果想在一個(gè)方法里調(diào)用其他方法則只需:實(shí)例名.方法名 或者 類名.方法名 即可。

2.安全方法,私有方法,安全變量,私有變量

安全方法一般是為了保護(hù)類的安全性,為了限制訪問(wèn)權(quán)限而設(shè)立的。一般只需在方法前加單下劃線即可,那么私有方法怎么訪問(wèn)呢?和其他方法訪問(wèn)方法一樣。

安全方法:可以在外部進(jìn)行調(diào)用并且其他方法也能訪問(wèn)到,它允許本身的任何方法進(jìn)行訪問(wèn),并可在外部調(diào)用,安全屬性也是;

私有方法:只能在私有方法內(nèi)部調(diào)用,不能通過(guò)類名或者類的實(shí)例名來(lái)調(diào)用,所以你可以在其他方法中通過(guò)self.ww來(lái)調(diào)用或者cls.ww來(lái)調(diào)用,這樣就做到了私有的功能。

三、類的特性

類的特性,相信接觸過(guò)面向?qū)ο蟮男』锇閼?yīng)該都知道,封裝、繼承和多態(tài)。

1.封裝

講的就是將一個(gè)功能封裝到類中,這個(gè)很好理解。

2.繼承

就是一個(gè)類和另一個(gè)類的主體結(jié)構(gòu)一致,就好比父親和兒子的區(qū)別,兒子繼承父親所有的特點(diǎn),這使得他可以少做一些重復(fù)勞動(dòng),并且他還有自己的一套,這就叫繼承,下面我們通過(guò)實(shí)例說(shuō)明:

可以看出我們實(shí)現(xiàn)了繼承,就是簡(jiǎn)單的在子類中添加了父類的名字,并且寫了個(gè)spuer,用來(lái)繼承父類的所有的特性。雖然父類的所有東西我們都能繼承,但并不是說(shuō)所有的你都能用的,比如說(shuō)父類的私有方法或者私有屬性:

那么如果你想要使用它們那該怎么辦呢?很簡(jiǎn)單,你只需將私有方法或者屬性添加到父類某個(gè)可以公開(kāi)訪問(wèn)的類中,然后子類就能使用這些父類定義的私有方法或者屬性了。

當(dāng)然,除了單一繼承,還有多繼承,它可以繼承兩個(gè)類的所有屬性和方法,只不過(guò)寫法與其他編程語(yǔ)言有點(diǎn)不同,它的多繼承就是遞歸繼承,不能同時(shí)繼承,也就是:

這樣就實(shí)現(xiàn)了多繼承,多繼承可以大大簡(jiǎn)化代碼量。我們可以通過(guò)一些魔法方法來(lái)獲得父類的名稱以及說(shuō)明。

__bases__  #查看類的所有父類
__base__  #查看類的父類
__doc__    #查看類的使用文檔,在類中以三引號(hào)擴(kuò)起來(lái)的部分都是文檔內(nèi)容

我們注意到,只需繼承一個(gè)類就實(shí)現(xiàn)了多繼承,這是因?yàn)閟on類之前繼承過(guò)father類,所以現(xiàn)在你必須通過(guò)son類繼承father類,后面給它初始化,如果是兩個(gè)沒(méi)有任何關(guān)聯(lián)的類,則需要寫兩個(gè)類名進(jìn)去,并且初始化。

3.多態(tài)

多態(tài)的應(yīng)用使得類更靈活,它可以共享某個(gè)方法,給所有的類對(duì)象使用。我們來(lái)看看:

這里是通過(guò)對(duì)一個(gè)函數(shù)傳一個(gè)對(duì)象,使得它擁有了類的特征功能,這也就是鴨子類型。

4.動(dòng)態(tài)修改值

當(dāng)一個(gè)類需要大量創(chuàng)建實(shí)例時(shí),可以通過(guò)魔法方法slots來(lái)聲明。這樣可以減少內(nèi)存消耗。但是它只是動(dòng)態(tài)的修改,并沒(méi)有綁定到類的實(shí)例中,而且類只能訪問(wèn)slots里設(shè)定的值。

可以看到訪問(wèn)不了值,因?yàn)闆](méi)有這個(gè)屬性,我們?cè)賮?lái)看看沒(méi)slots的時(shí)候:

現(xiàn)在正常了,另外,子類的slots為它本身和父類的slots,父類只是本身。這樣極大省內(nèi)存,但是這樣好像還不夠Python,因?yàn)樗木窒扌?,讓我決定使用property。property有兩種創(chuàng)建方式,我們來(lái)看看:

裝飾器

直接在方法上運(yùn)用裝飾器,十分方便。他有設(shè)置,獲取,刪除三個(gè)屬性,例如:

可以看到,非常簡(jiǎn)單就實(shí)現(xiàn)了功能,少寫了很多代碼哦。

在類中定義值為property對(duì)象的類屬性

使用property函數(shù)來(lái)實(shí)現(xiàn):

可以看到,這樣就實(shí)現(xiàn),那么現(xiàn)在我們寫一個(gè)稍微復(fù)雜點(diǎn)的,可以進(jìn)行交互的動(dòng)態(tài)修改屬性吧。

可以看到,我輸入屬性名和屬性值,如果你想做的更好,可以給它加其他功能,比如私有方法私有屬性,訪問(wèn)其他類??傊δ芏喽啵枰阕约簞?dòng)手親自實(shí)踐。

四、總結(jié)

通過(guò)對(duì)類的解讀,讓大家明白了,代碼的簡(jiǎn)潔美觀有多重要,為了我們的程序不那么low,請(qǐng)學(xué)好類。

到此這篇關(guān)于一篇文章帶你搞懂Python類的相關(guān)知識(shí)的文章就介紹到這了,更多相關(guān)Python類內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • Python中的Nonetype類型怎么判斷
  • python數(shù)據(jù)類型相關(guān)知識(shí)擴(kuò)展
  • 用 Python 元類的特性實(shí)現(xiàn) ORM 框架
  • 詳細(xì)總結(jié)Python類的多繼承知識(shí)
  • python 使用Tensorflow訓(xùn)練BP神經(jīng)網(wǎng)絡(luò)實(shí)現(xiàn)鳶尾花分類
  • Python-typing: 類型標(biāo)注與支持 Any類型詳解
  • Python進(jìn)階學(xué)習(xí)之帶你探尋Python類的鼻祖-元類
  • python中必會(huì)的四大高級(jí)數(shù)據(jù)類型(字符,元組,列表,字典)
  • Python如何把不同類型數(shù)據(jù)的json序列化
  • Python基礎(chǔ)之元類詳解
  • Python入門學(xué)習(xí)之類的相關(guān)知識(shí)總結(jié)

標(biāo)簽:濟(jì)南 長(zhǎng)沙 崇左 山西 海南 喀什 山西 安康

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《一篇文章帶你搞懂Python類的相關(guān)知識(shí)》,本文關(guān)鍵詞  ;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 收縮
    • 微信客服
    • 微信二維碼
    • 電話咨詢

    • 400-1100-266
    沛县| 盘锦市| 万全县| 县级市| 小金县| 新乡市| 始兴县| 山东省| 徐水县| 额尔古纳市| 洛隆县| 前郭尔| 弋阳县| 大港区| 红河县| 镇坪县| 辽阳市| 昌乐县| 武山县| 永康市| 正宁县| 平安县| 富裕县| 东乡族自治县| 枝江市| 松溪县| 富裕县| 宁波市| 东丽区| 云梦县| 保靖县| 磴口县| 济源市| 遂平县| 阿拉善盟| 津南区| 扶余县| 咸宁市| 定襄县| 会东县| 平陆县|