欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python基礎(chǔ)學(xué)習(xí)之類(lèi)與實(shí)例基本用法與注意事項(xiàng)詳解

 更新時(shí)間:2019年06月17日 12:06:58   作者:George-Henry  
這篇文章主要介紹了Python基礎(chǔ)學(xué)習(xí)之類(lèi)與實(shí)例基本用法與注意事項(xiàng),結(jié)合實(shí)例形式詳細(xì)分析了Python面相對(duì)象程序設(shè)計(jì)中關(guān)于類(lèi)的定義與實(shí)例化對(duì)象相關(guān)操作技巧與注意事項(xiàng),需要的朋友可以參考下

本文實(shí)例講述了Python基礎(chǔ)學(xué)習(xí)之類(lèi)與實(shí)例基本用法與注意事項(xiàng)。分享給大家供大家參考,具體如下:

前言

和其他編程語(yǔ)言相比,Python用非常少的新語(yǔ)法和語(yǔ)義將類(lèi)加入到語(yǔ)言中。Python的類(lèi)提供了面向?qū)ο缶幊痰乃袠?biāo)準(zhǔn)特性:類(lèi)繼承機(jī)制允許多個(gè)基類(lèi),派生類(lèi)可以覆蓋它基類(lèi)的任何方法,一個(gè)方法可以調(diào)用基類(lèi)中相同名稱(chēng)的的方法。對(duì)象可以包含任意數(shù)量和類(lèi)型的數(shù)據(jù)。和模塊一樣,類(lèi)也擁有Python天然的動(dòng)態(tài)特性:它們?cè)谶\(yùn)行時(shí)創(chuàng)建,可以在創(chuàng)建后修改。

Python的類(lèi)

Python類(lèi)實(shí)例時(shí),先調(diào)用__new__方法,返回該類(lèi)的實(shí)例對(duì)象,這個(gè)實(shí)例對(duì)象就是__init__方法的第一個(gè)參數(shù)self,即self是__new__的返回值

(1)類(lèi)的訪問(wèn)控制:

①默認(rèn):Python中的成員函數(shù)和成員變量都是公開(kāi)的(public),在python中沒(méi)有類(lèi)似public,private等關(guān)鍵詞來(lái)修飾成員函數(shù)和成員變量。

②私有:在python中定義私有變量只需要在變量名或函數(shù)名前加上”__“兩個(gè)下劃線,那么這個(gè)函數(shù)或變量就是私有的了

原理:在內(nèi)部,python使用一種name mangling技術(shù),將__membername替換成_classname__membername,也就是說(shuō),類(lèi)的內(nèi)部定義中,所有以雙下劃線開(kāi)始的名字都被"翻譯"成前面加上單下劃線和類(lèi)名的形式。

例如:為了保證不能在class之外訪問(wèn)私有變量,Python會(huì)在類(lèi)的內(nèi)部自動(dòng)的把我們定義的__spam私有變量的名字替換成為_(kāi)classname__spam(注意,classname前面是一個(gè)下劃線,spam前是兩個(gè)下劃線),因此,用戶(hù)在外部訪問(wèn)__spam的時(shí)候就會(huì)提示找不到相應(yīng)的變量。

注:python中的私有變量和私有方法仍然是可以訪問(wèn)的;訪問(wèn)方法如下:

私有變量:實(shí)例._類(lèi)名__變量名

私有方法:實(shí)例._類(lèi)名__方法名()

(2)Python類(lèi)和類(lèi)成員的私有化支持:

其實(shí),Python并沒(méi)有真正的私有化支持,但可用下劃線得到偽私有。所以一般需要統(tǒng)一規(guī)范:

① _xxx:"單下劃線" 開(kāi)始的成員變量叫做保護(hù)變量(protected),意思是只有類(lèi)實(shí)例和子類(lèi)實(shí)例能訪問(wèn)到這些變量,

需通過(guò)類(lèi)提供的接口進(jìn)行訪問(wèn);不能用'from <module> import *'導(dǎo)入;

② __xxx:類(lèi)中的私有變量/方法名(Python的函數(shù)也是對(duì)象,所以成員方法稱(chēng)為成員變量也行得通),

" 雙下劃線 "開(kāi)始的是私有成員,意思是只有類(lèi)對(duì)象自己能訪問(wèn),連子類(lèi)對(duì)象也不能訪問(wèn)到這個(gè)數(shù)據(jù);

③ __xxx__系統(tǒng)定義名字,前后均有一個(gè)“雙下劃線”代表python里特殊方法專(zhuān)用的標(biāo)識(shí),如__init__()代表類(lèi)的構(gòu)造函數(shù);

注:python派生類(lèi)可以與父類(lèi)同名,因此這種情況可以使用私有變量:

class A():
  def __init__(self):
    self.__name='python' #翻譯成self._A__name='python'
class B(A):
  def func(self):
    print self.__name #翻譯成print self._B__name
instance=B()
#instance.func()#報(bào)錯(cuò):AttributeError: B instance has no attribute '_B__name'
print instance.__dict__
print instance._A__name

輸出結(jié)果:

{'_A__name': 'python'}
python

注:當(dāng)B類(lèi)取名A時(shí),則instance.func()可以直接調(diào)用

(3)Python類(lèi)的繼承:

python類(lèi)和其他OOP語(yǔ)言一樣,都可以使用繼承功能,也同樣不允許多繼承,但可以通過(guò)多級(jí)繼承來(lái)實(shí)現(xiàn)。

(1)繼承方法:派生類(lèi)的類(lèi)名的()里面寫(xiě)入父類(lèi)的類(lèi)名;

(2)構(gòu)造函數(shù):子類(lèi)中構(gòu)造函數(shù)加上super(子類(lèi),self).__init__(參數(shù)1,參數(shù)2,….);

(3)實(shí)例化順序:實(shí)例化對(duì)象c---->c調(diào)用子類(lèi)__init__()---->子類(lèi)__init__()繼承父類(lèi)__init__()----->調(diào)用父類(lèi)__init__();

(4)判斷繼承的函數(shù):isinstance()及issubclass(),其中isinstance()用于檢查實(shí)例類(lèi)型;issubclass()用于檢查類(lèi)繼承;

(5)方法重寫(xiě):子類(lèi)中定義與父類(lèi)同名的方法,子類(lèi)實(shí)例調(diào)用時(shí)就會(huì)使用重寫(xiě)的方法;

(6)子類(lèi)重寫(xiě)構(gòu)造函數(shù):子類(lèi)構(gòu)造函數(shù)中不使用super調(diào)用父類(lèi)即可;

(7)多態(tài):當(dāng)子類(lèi)和父類(lèi)都存在相同名字的方法時(shí),子類(lèi)的方法覆蓋了父類(lèi)的方法,在代碼運(yùn)行時(shí),會(huì)調(diào)用子類(lèi)的方法;

注:多態(tài)實(shí)現(xiàn)了開(kāi)發(fā)-封閉原則:

①對(duì)擴(kuò)展開(kāi)放(Open for extension):允許子類(lèi)重寫(xiě)方法函數(shù);
②對(duì)修改封閉(Closed for modification):不重寫(xiě),直接繼承父類(lèi)方法函數(shù);

Python類(lèi)的其他知識(shí)

(1)python中self和cls的區(qū)別:

self表示一個(gè)具體的實(shí)例本身,相當(dāng)于php的this。如果用了staticmethod,那么就可以無(wú)視這個(gè)self,將這個(gè)方法當(dāng)成一個(gè)普通的函數(shù)使用;

cls表示這個(gè)類(lèi)本身;

@staticmethod:只能用類(lèi)名去調(diào)用的方法;
@classmethod:既能用實(shí)例去調(diào)用,也能用類(lèi)名去調(diào)用的方法;

(2)多重繼承的方法搜索順序:

對(duì)于多數(shù)應(yīng)用來(lái)說(shuō),在最簡(jiǎn)單的情況下,你可以認(rèn)為搜索從父類(lèi)所繼承屬性的操作是深度優(yōu)先、從左至右的,當(dāng)層次結(jié)構(gòu)中存在重疊時(shí)不會(huì)在同一個(gè)類(lèi)中搜索兩次。 因此,如果某一屬性在 DerivedClassName 中未找到,則會(huì)到 Base1 中搜索它,然后(遞歸地)到 Base1 的基類(lèi)中搜索,如果在那里未找到,再到 Base2 中搜索,依此類(lèi)推。

真實(shí)情況比這個(gè)更復(fù)雜一些;方法解析順序會(huì)動(dòng)態(tài)改變以支持對(duì) super() 的協(xié)同調(diào)用。 這種方式在某些其他多重繼承型語(yǔ)言中被稱(chēng)為后續(xù)方法調(diào)用,它比單繼承型語(yǔ)言中的 super 調(diào)用更強(qiáng)大。

動(dòng)態(tài)改變順序是有必要的,因?yàn)樗卸嘀乩^承的情況都會(huì)顯示出一個(gè)或更多的菱形關(guān)聯(lián)(即至少有一個(gè)父類(lèi)可通過(guò)多條路徑被最底層類(lèi)所訪問(wèn))。 例如,所有類(lèi)都是繼承自 object,因此任何多重繼承的情況都提供了一條以上的路徑可以通向 object。 為了確?;?lèi)不會(huì)被訪問(wèn)一次以上,動(dòng)態(tài)算法會(huì)用一種特殊方式將搜索順序線性化, 保留每個(gè)類(lèi)所指定的從左至右的順序,只調(diào)用每個(gè)父類(lèi)一次,并且保持單調(diào)(即一個(gè)類(lèi)可以被子類(lèi)化而不影響其父類(lèi)的優(yōu)先順序)。

更多關(guān)于Python相關(guān)內(nèi)容感興趣的讀者可查看本站專(zhuān)題:《Python面向?qū)ο蟪绦蛟O(shè)計(jì)入門(mén)與進(jìn)階教程》、《Python數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Python函數(shù)使用技巧總結(jié)》、《Python字符串操作技巧匯總》、《Python編碼操作技巧總結(jié)》及《Python入門(mén)與進(jìn)階經(jīng)典教程

希望本文所述對(duì)大家Python程序設(shè)計(jì)有所幫助。

相關(guān)文章

  • python3正則模塊re的使用方法詳解

    python3正則模塊re的使用方法詳解

    這篇文章主要介紹了python3正則模塊re的使用方法詳解,需要的朋友可以參考下
    2020-02-02
  • Python3利用Qt5實(shí)現(xiàn)簡(jiǎn)易的五子棋游戲

    Python3利用Qt5實(shí)現(xiàn)簡(jiǎn)易的五子棋游戲

    這篇文章主要為大家詳細(xì)介紹了Python3利用Qt5實(shí)現(xiàn)簡(jiǎn)易的五子棋游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • Python數(shù)據(jù)結(jié)構(gòu)與算法中的棧詳解(3)

    Python數(shù)據(jù)結(jié)構(gòu)與算法中的棧詳解(3)

    這篇文章主要為大家詳細(xì)介紹了Python中的棧,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2022-03-03
  • python如何開(kāi)啟多線程

    python如何開(kāi)啟多線程

    這篇文章主要介紹了python如何開(kāi)啟多線程問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • 利用Python制作百度圖片下載器

    利用Python制作百度圖片下載器

    這篇文章主要介紹了利用Python制作的一個(gè)百度圖片下載器,可以顯示實(shí)時(shí)的下載進(jìn)度,文中的示例代碼講解詳細(xì),感興趣的可以跟隨小編學(xué)習(xí)一下
    2022-01-01
  • pandas 缺失值與空值處理的實(shí)現(xiàn)方法

    pandas 缺失值與空值處理的實(shí)現(xiàn)方法

    這篇文章主要介紹了pandas 缺失值與空值處理的實(shí)現(xiàn)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-10-10
  • python+opencv實(shí)現(xiàn)高斯平滑濾波

    python+opencv實(shí)現(xiàn)高斯平滑濾波

    這篇文章主要為大家詳細(xì)介紹了python+opencv實(shí)現(xiàn)高斯平滑濾波,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-12-12
  • 用python實(shí)現(xiàn)爬取奧特曼圖片實(shí)例

    用python實(shí)現(xiàn)爬取奧特曼圖片實(shí)例

    大家好,本篇文章主要講的是用python實(shí)現(xiàn)爬取奧特曼圖片實(shí)例,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下
    2022-02-02
  • python 匿名函數(shù)與三元運(yùn)算學(xué)習(xí)筆記

    python 匿名函數(shù)與三元運(yùn)算學(xué)習(xí)筆記

    這篇文章主要介紹了python 匿名函數(shù)與三元運(yùn)算的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)python 編程,感興趣的朋友可以了解下
    2020-10-10
  • Python中url標(biāo)簽使用知識(shí)點(diǎn)總結(jié)

    Python中url標(biāo)簽使用知識(shí)點(diǎn)總結(jié)

    這篇文章主要介紹了Python中url標(biāo)簽使用知識(shí)點(diǎn)以及相關(guān)實(shí)例代碼,需要的朋友們參考下。
    2020-01-01

最新評(píng)論