欧美成人午夜免费全部完,亚洲午夜福利精品久久,а√最新版在线天堂,另类亚洲综合区图片小说区,亚洲欧美日韩精品色xxx

千鋒扣丁學堂Python培訓之類與實例基本用法與注意事項詳解

2019-06-17 13:48:04 1271瀏覽

今天千鋒扣丁學堂Python培訓老師給大家分享一篇關(guān)于類與實例基本用法與注意事項的詳細介紹,結(jié)合實例形式詳細分析了Python面相對象程序設(shè)計中關(guān)于類的定義與實例化對象相關(guān)操作技巧與注意事項,下面我們一起來看一下吧。



首先和其他編程語言相比,Python用非常少的新語法和語義將類加入到語言中。Python的類提供了面向?qū)ο缶幊痰乃袠藴侍匦裕侯惱^承機制允許多個基類,派生類可以覆蓋它基類的任何方法,一個方法可以調(diào)用基類中相同名稱的的方法。對象可以包含任意數(shù)量和類型的數(shù)據(jù)。和模塊一樣,類也擁有Python天然的動態(tài)特性:它們在運行時創(chuàng)建,可以在創(chuàng)建后修改。

Python的類

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

(1)類的訪問控制:

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

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

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

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

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

私有變量:實例._類名__變量名

私有方法:實例._類名__方法名()

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

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

①_xxx:"單下劃線"開始的成員變量叫做保護變量(protected),意思是只有類實例和子類實例能訪問到這些變量,

需通過類提供的接口進行訪問;不能用'from<module>import*'導入;

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

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

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

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

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()#報錯:AttributeError: B instance has no attribute '_B__name'
print instance.__dict__
print instance._A__name

輸出結(jié)果:

{'_A__name': 'python'}
python

注:當B類取名A時,則instance.func()可以直接調(diào)用

(3)Python類的繼承:

python類和其他OOP語言一樣,都可以使用繼承功能,也同樣不允許多繼承,但可以通過多級繼承來實現(xiàn)。

(1)繼承方法:派生類的類名的()里面寫入父類的類名;

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

(3)實例化順序:實例化對象c---->c調(diào)用子類__init__()---->子類__init__()繼承父類__init__()----->調(diào)用父類__init__();

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

(5)方法重寫:子類中定義與父類同名的方法,子類實例調(diào)用時就會使用重寫的方法;

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

(7)多態(tài):當子類和父類都存在相同名字的方法時,子類的方法覆蓋了父類的方法,在代碼運行時,會調(diào)用子類的方法;

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

①對擴展開放(Openforextension):允許子類重寫方法函數(shù);

②對修改封閉(Closedformodification):不重寫,直接繼承父類方法函數(shù);

Python類的其他知識

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

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

②cls表示這個類本身;

@staticmethod:只能用類名去調(diào)用的方法;

@classmethod:既能用實例去調(diào)用,也能用類名去調(diào)用的方法;

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

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

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

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

以上就是關(guān)于千鋒扣丁學堂Python培訓之類與實例基本用法與注意事項詳解的全部內(nèi)容,想要了解更多關(guān)于Python開發(fā)方面內(nèi)容的小伙伴,請關(guān)注扣丁學堂Python培訓官網(wǎng)、微信等平臺,扣丁學堂IT職業(yè)在線學習教育有專業(yè)的Python講師為您指導,此外扣丁學堂老師精心推出的Python視頻教程定能讓你快速掌握Python從入門到精通開發(fā)實戰(zhàn)技能??鄱W堂Python技術(shù)交流群:279521237。


扣丁學堂微信公眾號                          Python全棧開發(fā)爬蟲人工智能機器學習數(shù)據(jù)分析免費公開課直播間


      【關(guān)注微信公眾號獲取更多學習資料】         【掃碼進入Python全棧開發(fā)免費公開課】



查看更多關(guān)于"Python開發(fā)資訊"的相關(guān)文章>

標簽: Python培訓 Python視頻教程 Python在線視頻 Python學習視頻 Python培訓班

熱門專區(qū)

暫無熱門資訊

課程推薦

微信
微博
15311698296

全國免費咨詢熱線

郵箱:codingke@1000phone.com

官方群:148715490

北京千鋒互聯(lián)科技有限公司版權(quán)所有   北京市海淀區(qū)寶盛北里西區(qū)28號中關(guān)村智誠科創(chuàng)大廈4層
京ICP備2021002079號-2   Copyright ? 2017 - 2022
返回頂部 返回頂部