中文字幕理论片,69视频免费在线观看,亚洲成人app,国产1级毛片,刘涛最大尺度戏视频,欧美亚洲美女视频,2021韩国美女仙女屋vip视频

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
python3 入門 (四) 類與繼承

Python 類

Python中的類提供了面向?qū)ο缶幊痰乃谢竟δ埽侯惖睦^承機(jī)制允許多個(gè)基類,派生類可以覆蓋基類中的任何方法,方法中可以調(diào)用基類中的同名方法。

對(duì)象可以包含任意數(shù)量和類型的數(shù)據(jù)。

python類與c++類相似,提供了類的封裝,繼承、多繼承,構(gòu)造函數(shù)、析構(gòu)函數(shù)。

在python3中,所有類最頂層父類都是object類,與java類似,如果定義類的時(shí)候沒有寫出父類,則object類就是其直接父類。

 

 

類定義

類定義語法格式如下:

class ClassName:    <statement-1>    .    .    .    <statement-N>

類對(duì)象:創(chuàng)建一個(gè)類之后,可以通過類名訪問、改變其屬性、方法

實(shí)例對(duì)象:類實(shí)例化后,可以使用其屬性,可以動(dòng)態(tài)的為實(shí)例對(duì)象添加屬性(類似javascript)而不影響類對(duì)象。

 

類的屬性

可以使用點(diǎn)(.)來訪問對(duì)象的屬性

也可以使用以下函數(shù)的方式來訪問屬性:

  • getattr(obj, name[, default]) : 訪問對(duì)象的屬性

  • hasattr(obj,name) : 檢查是否存在一個(gè)屬性

  • setattr(obj,name,value) : 設(shè)置一個(gè)屬性。如果屬性不存在,會(huì)創(chuàng)建一個(gè)新屬性
  • delattr(obj, name) : 刪除屬性

 

Python內(nèi)置類屬性

  • __dict__ : 類的屬性(包含一個(gè)字典,由類的數(shù)據(jù)屬性組成)

  • __doc__ :類的文檔字符串

  • __name__: 類名

  • __module__: 類定義所在的模塊(類的全名是'__main__.className',如果類位于一個(gè)導(dǎo)入模塊mymod中,那么className.__module__ 等于 mymod)

  • __bases__ : 類的所有父類構(gòu)成元素(包含了以個(gè)由所有父類組成的元組)

 1 class Person: 2     "Person類" 3     def __init__(self, name, age, gender): 4         print('進(jìn)入Person的初始化') 5         self.name = name 6         self.age = age 7         self.gender = gender 8         print('離開Person的初始化') 9 10     def getName(self):11         print(self.name)12 13 p = Person('ice', 18, '')14 15 print(p.name)  # ice16 print(p.age)  # 1817 print(p.gender)  #18 print(hasattr(p, 'weight'))  # False19 # 為p添加weight屬性20 p.weight = '70kg'21 print(hasattr(p, 'weight'))  # True22 print(getattr(p, 'name'))  # ice23 24 print(p.__dict__)  # {'age': 18, 'gender': '男', 'name': 'ice'}25 print(Person.__name__)  # Person26 print(Person.__doc__)  # Person類27 print(Person.__dict__)  # {'__doc__': 'Person類', '__weakref__': <attribute '__weakref__' of 'Person' objects>, '__init__': <function Person.__init__ at 0x000000000284E950>, 'getName': <function Person.getName at 0x000000000284EA60>, '__dict__': <attribute '__dict__' of 'Person' objects>, '__module__': '__main__'}28 print(Person.__mro__)  # (<class '__main__.Person'>, <class 'object'>)29 print(Person.__bases__)  # (<class 'object'>,)30 print(Person.__module__)  # __main__

 

 

類的方法

在類地內(nèi)部,使用def關(guān)鍵字可以為類定義一個(gè)方法,與一般函數(shù)定義不同,類方法必須包含參數(shù)self,且為第一個(gè)參數(shù)。

 

類的專有方法:

  • __init__ 構(gòu)造函數(shù),在生成對(duì)象時(shí)調(diào)用

  • __del__ 析構(gòu)函數(shù),釋放對(duì)象時(shí)使用

  • __repr__ 打印,轉(zhuǎn)換

  • __setitem__按照索引賦值

  • __getitem__按照索引獲取值

  • __len__獲得長度

  • __cmp__比較運(yùn)算

  • __call__函數(shù)調(diào)用

  • __add__加運(yùn)算

  • __sub__減運(yùn)算

  • __mul__乘運(yùn)算

  • __div__除運(yùn)算

  • __mod__求余運(yùn)算

  • __pow__稱方

 

__init__()方法是一種特殊的方法,被稱為類的構(gòu)造函數(shù)或初始化方法,當(dāng)創(chuàng)建了這個(gè)類的實(shí)例時(shí)就會(huì)調(diào)用該方法,與c++中構(gòu)造函數(shù)類似。只需在自定義的類中重寫__init__()方法即可。

 1 class Person: 2     def __init__(self, name, age, gender): 3         print('進(jìn)入Person的初始化') 4         self.name = name 5         self.age = age 6         self.gender = gender 7         print('離開Person的初始化') 8  9     def getName(self):10         print(self.name)11 12 # Person實(shí)例對(duì)象13 p = Person('ice', 18, '')14 print(p.name)15 print(p.age)16 print(p.gender)17 p.getName()18 19 # 進(jìn)入Person的初始化20 # 離開Person的初始化21 # ice22 # 1823 #24 # ice

 

 

析構(gòu)函數(shù) __del__ ,__del__在對(duì)象消逝的時(shí)候被調(diào)用,當(dāng)對(duì)象不再被使用時(shí),__del__方法運(yùn)行:

 

 

類的封裝

 

python通過變量名命名來區(qū)分屬性和方法的訪問權(quán)限,默認(rèn)權(quán)限相當(dāng)于c++和java中的public

 

類的私有屬性: __private_attrs:兩個(gè)下劃線開頭,聲明該屬性為私有,不能在類地外部被使用或直接訪問。在類內(nèi)部的方法中使用時(shí)self.__private_attrs。

類的私有方法:__private_method:兩個(gè)下劃線開頭,聲明該方法為私有方法,不能在類地外部調(diào)用。在類的內(nèi)部調(diào)用 self.__private_methods

 

雖然python不允許實(shí)例化的類訪問私有數(shù)據(jù),但可以使用 object._className__attrName 訪問屬性。其實(shí)python內(nèi)部私有化的實(shí)現(xiàn)只是將attrName屬性變?yōu)榱薩className__attrName而已

 1 class Demo: 2     __id = 123456 3  4     def getId(self): 5         return self.__id 6  7 temp = Demo() 8 # print(temp.__id)  # 報(bào)錯(cuò) AttributeError: 'Demo' object has no attribute '__id' 9 print(temp.getId())  # 12345610 print(temp._Demo__id)  # 123456

 

 

類的繼承

面向?qū)ο蟮木幊處淼闹饕锰幹皇谴a的重用,實(shí)現(xiàn)這種重用的方法之一是通過繼承機(jī)制。繼承完全可以理解成類之間的類型和子類型關(guān)系。

需要注意的地方:繼承語法 class 派生類名(基類名)://... 基類名寫作括號(hào)里,基本類是在類定義的時(shí)候,在元組之中指明的。

在python中繼承中的一些特點(diǎn):

  • 1:在繼承中基類的構(gòu)造(__init__()方法)不會(huì)被自動(dòng)調(diào)用,它需要在其派生類的構(gòu)造中親自專門調(diào)用。使用super().__init__()或parentClassName.__init__()
  • 2:在調(diào)用基類的方法時(shí),需要加上基類的類名前綴,且需要帶上self參數(shù)變量。區(qū)別于在類中調(diào)用普通函數(shù)時(shí)并不需要帶上self參數(shù)
  • 3:Python總是首先查找對(duì)應(yīng)類型的方法,如果它不能在派生類中找到對(duì)應(yīng)的方法,它才開始到基類中逐個(gè)查找。(先在本類中查找調(diào)用的方法,找不到才去基類中找)。

如果在繼承元組中列了一個(gè)以上的類,那么它就被稱作"多重繼承" 。

語法:

派生類的聲明,與他們的父類類似,繼承的基類列表跟在類名之后,如下所示:

 

多態(tài)

如果父類方法的功能不能滿足需求,可以在子類重寫父類的方法。實(shí)例對(duì)象調(diào)用方法時(shí)會(huì)調(diào)用其對(duì)應(yīng)子類的重寫后的方法

 

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
Python面向?qū)ο缶幊蹋侯惡蛯?shí)例
生活服務(wù)
熱點(diǎn)新聞
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服