成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

python函數(shù)繼承多態(tài) python 繼承 多態(tài)

Python中的面向?qū)ο螅ǜ呒?jí))之私有方法、多繼承、多態(tài)

特征:私有屬性與私有方法不能從外部被調(diào)用,也不能被子類繼承

在松原等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場(chǎng)前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供成都做網(wǎng)站、成都網(wǎng)站設(shè)計(jì) 網(wǎng)站設(shè)計(jì)制作按需定制開發(fā),公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),品牌網(wǎng)站制作,營(yíng)銷型網(wǎng)站建設(shè),成都外貿(mào)網(wǎng)站建設(shè),松原網(wǎng)站建設(shè)費(fèi)用合理。

唯一寫法:在屬性或方法前面加上__(兩個(gè)下劃線)

我們寫一個(gè)簡(jiǎn)單的例子,創(chuàng)建一個(gè)類,包含私有方法、私有屬性、普通方法、普通屬性,并生成一個(gè)實(shí)例

私有屬性和私有方法可以從內(nèi)部被調(diào)用(總不能我寫了,但是哪都不讓用吧)

我們?cè)囋囋陬惱镌偌尤胍粋€(gè)新的方法,調(diào)用私有方法和屬性

可以看到,私有屬性和私有方法是可以在類內(nèi)部被調(diào)用的。

舉個(gè)私有屬性應(yīng)用場(chǎng)景的例子

二。object類

我們?cè)囈幌?/p>

三。多繼承

一個(gè)子類可以繼承多個(gè)父類,用逗號(hào)隔開

多個(gè)父類中有同名方法時(shí),按照繼承順序進(jìn)行調(diào)用

四。多態(tài)

當(dāng)不同的實(shí)例,有同名的方法時(shí),我們可以一個(gè)函數(shù),傳入不同的實(shí)例,執(zhí)行對(duì)應(yīng)的方法。

我們定義一個(gè)貓和一個(gè)狗的類,兩個(gè)類中都有'叫'的方法。并各生成一個(gè)實(shí)例。

定義一個(gè)函數(shù),用函數(shù)來調(diào)用'叫'的方法

這就叫多態(tài)。

Python面向?qū)ο缶幊讨^承與多態(tài)詳解

Python面向?qū)ο缶幊讨^承與多態(tài)詳解

本文實(shí)例講述了Python面向?qū)ο缶幊讨^承與多態(tài)。分享給大家供大家參考,具體如下:

Python 類的繼承

在OOP(Object Oriented Programming)程序設(shè)計(jì)中,當(dāng)我們定義一個(gè)class的時(shí)候,可以從某個(gè)現(xiàn)有的class 繼承,新的class稱為子類(Subclass),而被繼承的class稱為基類、父類或超類(Base class、Super class)。

我們先來定義一個(gè)class Person,表示人,定義屬性變量 name 及 sex (姓名和性別);

定義一個(gè)方法print_title():當(dāng)sex是male時(shí),print man;當(dāng)sex 是female時(shí),print woman。參考如下代碼:

class Person(object):

def __init__(self,name,sex):

self.name = name

self.sex = sex

def print_title(self):

if self.sex == "male":

print("man")

elif self.sex == "female":

print("woman")

class Child(Person): # Child 繼承 Person

pass

May = Child("May","female")

Peter = Person("Peter","male")

print(May.name,May.sex,Peter.name,Peter.sex) # 子類繼承父類方法及屬性

May.print_title()

Peter.print_title()

而我們編寫 Child 類,完全可以繼承 Person 類(Child 就是 Person);使用 class subclass_name(baseclass_name) 來表示繼承;

繼承有什么好處?最大的好處是子類獲得了父類的全部屬性及功能。如下 Child 類就可以直接使用父類的 print_title() 方法

實(shí)例化Child的時(shí)候,子類繼承了父類的構(gòu)造函數(shù),就需要提供父類Person要求的兩個(gè)屬性變量 name 及 sex:

在繼承關(guān)系中,如果一個(gè)實(shí)例的數(shù)據(jù)類型是某個(gè)子類,那它也可以被看做是父類(May 既是 Child 又是 Person)。但是,反過來就不行(Peter 僅是 Person,而不是Child)。

繼承還可以一級(jí)一級(jí)地繼承下來,就好比從爺爺?shù)桨职帧⒃俚絻鹤舆@樣的關(guān)系。而任何類,最終都可以追溯到根類object,這些繼承關(guān)系看上去就像一顆倒著的樹。比如如下的繼承樹:

isinstance() 及 issubclass()

Python 與其他語言不同點(diǎn)在于,當(dāng)我們定義一個(gè) class 的時(shí)候,我們實(shí)際上就定義了一種數(shù)據(jù)類型。我們定義的數(shù)據(jù)類型和Python自帶的數(shù)據(jù)類型,比如str、list、dict沒什么兩樣。

Python 有兩個(gè)判斷繼承的函數(shù):isinstance() 用于檢查實(shí)例類型;issubclass() 用于檢查類繼承。參見下方示例:

class Person(object):

pass

class Child(Person): # Child 繼承 Person

pass

May = Child()

Peter = Person()

print(isinstance(May,Child)) # True

print(isinstance(May,Person)) # True

print(isinstance(Peter,Child)) # False

print(isinstance(Peter,Person)) # True

print(issubclass(Child,Person)) # True

Python 類的多態(tài)

在說明多態(tài)是什么之前,我們?cè)?Child 類中重寫 print_title() 方法:若為male,print boy;若為female,print girl

class Person(object):

def __init__(self,name,sex):

self.name = name

self.sex = sex

def print_title(self):

if self.sex == "male":

print("man")

elif self.sex == "female":

print("woman")

class Child(Person): # Child 繼承 Person

def print_title(self):

if self.sex == "male":

print("boy")

elif self.sex == "female":

print("girl")

May = Child("May","female")

Peter = Person("Peter","male")

print(May.name,May.sex,Peter.name,Peter.sex)

May.print_title()

Peter.print_title()

當(dāng)子類和父類都存在相同的 print_title()方法時(shí),子類的 print_title() 覆蓋了父類的 print_title(),在代碼運(yùn)行時(shí),會(huì)調(diào)用子類的 print_title()

這樣,我們就獲得了繼承的另一個(gè)好處:多態(tài)。

多態(tài)的好處就是,當(dāng)我們需要傳入更多的子類,例如新增 Teenagers、Grownups 等時(shí),我們只需要繼承 Person 類型就可以了,而print_title()方法既可以直不重寫(即使用Person的),也可以重寫一個(gè)特有的。這就是多態(tài)的意思。調(diào)用方只管調(diào)用,不管細(xì)節(jié),而當(dāng)我們新增一種Person的子類時(shí),只要確保新方法編寫正確,而不用管原來的代碼。這就是著名的“開閉”原則:

對(duì)擴(kuò)展開放(Open for extension):允許子類重寫方法函數(shù)

對(duì)修改封閉(Closed for modification):不重寫,直接繼承父類方法函數(shù)

子類重寫構(gòu)造函數(shù)

子類可以沒有構(gòu)造函數(shù),表示同父類構(gòu)造一致;子類也可重寫構(gòu)造函數(shù);現(xiàn)在,我們需要在子類 Child 中新增兩個(gè)屬性變量:mother 和 father,我們可以構(gòu)造如下(建議子類調(diào)用父類的構(gòu)造方法,參見后續(xù)代碼):

class Person(object):

def __init__(self,name,sex):

self.name = name

self.sex = sex

class Child(Person): # Child 繼承 Person

def __init__(self,name,sex,mother,father):

self.name = name

self.sex = sex

self.mother = mother

self.father = father

May = Child("May","female","April","June")

print(May.name,May.sex,May.mother,May.father)

若父類構(gòu)造函數(shù)包含很多屬性,子類僅需新增1、2個(gè),會(huì)有不少冗余的代碼,這邊,子類可對(duì)父類的構(gòu)造方法進(jìn)行調(diào)用,參考如下:

class Person(object):

def __init__(self,name,sex):

self.name = name

self.sex = sex

class Child(Person): # Child 繼承 Person

def __init__(self,name,sex,mother,father):

Person.__init__(self,name,sex) # 子類對(duì)父類的構(gòu)造方法的調(diào)用

self.mother = mother

self.father = father

May = Child("May","female","April","June")

print(May.name,May.sex,May.mother,May.father)

多重繼承

多重繼承的概念應(yīng)該比較好理解,比如現(xiàn)在需要新建一個(gè)類 baby 繼承 Child , 可繼承父類及父類上層類的屬性及方法,優(yōu)先使用層類近的方法,代碼參考如下:

class Person(object):

def __init__(self,name,sex):

self.name = name

self.sex = sex

def print_title(self):

if self.sex == "male":

print("man")

elif self.sex == "female":

print("woman")

class Child(Person):

pass

class Baby(Child):

pass

May = Baby("May","female") # 繼承上上層父類的屬性

print(May.name,May.sex)

May.print_title() # 可使用上上層父類的方法

class Child(Person):

def print_title(self):

if self.sex == "male":

print("boy")

elif self.sex == "female":

print("girl")

class Baby(Child):

pass

May = Baby("May","female")

May.print_title() # 優(yōu)先使用上層類的方法

Python類的繼承與多態(tài)詳細(xì)介紹

類(Class): 用來描述具有相同的屬性和方法的對(duì)象的集合。

類變量:類變量在整個(gè)實(shí)例化的對(duì)象中是公用的。類變量定義在類中且在函數(shù)體之外。類變量通常不作為實(shí)例變量使用。

類有一個(gè)名為 __init__() 的特殊方法(構(gòu)造方法),該方法在類實(shí)例化時(shí)會(huì)自動(dòng)調(diào)用

self:self 代表的是類的實(shí)例,代表當(dāng)前對(duì)象的地址,而 self.class 則指向類。

類調(diào)用 Car.weight

實(shí)例化 car01=Car(5)

實(shí)例對(duì)象調(diào)用 car01.weght

我們?cè)跇?gòu)造類時(shí),Python3默認(rèn)我們繼承了object這個(gè)基類,我個(gè)人理解object就是個(gè)空的類,可以不用管為何要在括號(hào)中寫上object,這是Python3的特性,在python2中如果你沒有寫object的話不會(huì)默認(rèn)繼承了object這個(gè)基類。

同樣的我們自己希望繼承的父類只需要把objetc改為我們自己定義的類名即可。子類中可以擁有父類中所有的公有屬性和方法,但是可以通過在變量名前加下劃線使其變?yōu)樗接?,這樣子類就不可以訪問父類中的成員了。

以下三個(gè)公交車類的父類均為客車類,我們可以寫一個(gè)funcs方法使得每次調(diào)用funcs方法時(shí),傳入不同的對(duì)象以執(zhí)行不同的func方法,具體實(shí)現(xiàn)如下:

主函數(shù) :

可以看到,我將小 汽車 實(shí)例化為帶有重量為5t的一個(gè)具體對(duì)象,將客車實(shí)例化為帶有重量為20t的一個(gè)具體對(duì)象,將三個(gè)公交車實(shí)例化為帶有重量為15t的一個(gè)具體對(duì)象.

如上圖所示,我每次在調(diào)用funcs方法時(shí)都傳入了一個(gè)實(shí)例化對(duì)象,funcs根據(jù)不同的對(duì)象執(zhí)行相應(yīng)的內(nèi)部方法。

python面向?qū)ο蟮娜筇卣鞯挠梅ê秃瘮?shù)的用法一樣嗎

python面向?qū)ο蟮娜筇卣鞯挠梅ê秃瘮?shù)的用法一樣。面向?qū)ο蟮娜筇匦允侵阜庋b、繼承和多態(tài)。面向?qū)ο缶幊淌且环N編程方式,此編程方式的落地需要使用類和對(duì)象來實(shí)現(xiàn),所以,面向?qū)ο缶幊唐鋵?shí)就是對(duì)類和對(duì)象的使用。類就是一個(gè)模板,模板里可以包含多個(gè)函數(shù),函數(shù)里實(shí)現(xiàn)一些功能對(duì)象則是根據(jù)模板創(chuàng)建的實(shí)例,通過實(shí)例對(duì)象可以執(zhí)行類中的函數(shù)。

網(wǎng)頁(yè)標(biāo)題:python函數(shù)繼承多態(tài) python 繼承 多態(tài)
標(biāo)題來源:http://jinyejixie.com/article18/hpcpdp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供商城網(wǎng)站ChatGPT、定制開發(fā)、動(dòng)態(tài)網(wǎng)站、網(wǎng)站建設(shè)虛擬主機(jī)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

搜索引擎優(yōu)化
崇州市| 和平县| 离岛区| 辛集市| 兴化市| 久治县| 泰安市| 济源市| 宾阳县| 武定县| 石家庄市| 略阳县| 石柱| 东丽区| 平乡县| 通州区| 当阳市| 慈溪市| 长丰县| 阿拉善盟| 天等县| 蓝山县| 黑河市| 金堂县| 讷河市| 额敏县| 湛江市| 舒兰市| 康定县| 武安市| 东明县| 西昌市| 永泰县| 镇巴县| 天祝| 湘阴县| 汉中市| 海城市| 兴义市| 出国| 邯郸县|