真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

python函數(shù)繼承教學(xué),python繼承語法

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

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

創(chuàng)新互聯(lián)公司是一家集網(wǎng)站建設(shè),碑林企業(yè)網(wǎng)站建設(shè),碑林品牌網(wǎng)站建設(shè),網(wǎng)站定制,碑林網(wǎng)站建設(shè)報價,網(wǎng)絡(luò)營銷,網(wǎng)絡(luò)優(yōu)化,碑林網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強企業(yè)競爭力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時我們時刻保持專業(yè)、時尚、前沿,時刻以成就客戶成長自我,堅持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實用型網(wǎng)站。

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

Python 類的繼承

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

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

定義一個方法print_title():當(dāng)sex是male時,print man;當(dāng)sex 是female時,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() 方法

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

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

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

isinstance() 及 issubclass()

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

Python 有兩個判斷繼承的函數(shù):isinstance() 用于檢查實例類型;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)是什么之前,我們在 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()方法時,子類的 print_title() 覆蓋了父類的 print_title(),在代碼運行時,會調(diào)用子類的 print_title()

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

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

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

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

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

子類可以沒有構(gòu)造函數(shù),表示同父類構(gòu)造一致;子類也可重寫構(gòu)造函數(shù);現(xiàn)在,我們需要在子類 Child 中新增兩個屬性變量: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òu)造方法進行調(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) # 子類對父類的構(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)在需要新建一個類 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類的繼承??!誰能用通俗的方法,給小弟講一下,類的繼承??!

python的繼承實際上是一個指針或者是引用的鏈表。它是動態(tài)語言。

面向?qū)ο笥卸鄳B(tài)、繼承、封裝幾個主要概念。要形成面向?qū)ο筮€需要分層,抽象,動靜態(tài)建模等技能。

繼承通常是指類的繼承,派生類從基類里繼承它的屬性與方法。當(dāng)然也可以重載基類的方法,或者是重寫方法。python里雖然可以重寫方法,不過仍然可以通過super等函數(shù)修飾獲得基類方法。

基類又稱父類。派生類也稱為子類。

屬性就是對象中的變量。方法就是對象中的函數(shù)。

類是一種定義。如果類有了實例,就稱為對象。類是對象的靜態(tài)結(jié)構(gòu)的描述,是聲明。

Python中的繼承是什么意思?

繼承是子類復(fù)用父類的屬性和方法的機制,類的繼承是以生活中繼承為靈感設(shè)計的。

生活中繼承的例子有很多,例如,汽車的發(fā)展歷程就體現(xiàn)了繼承。最早汽車的輪胎都是實心的,功能少,性能差,而如今汽車的功能越來越多,性能越來越好,這是經(jīng)過一代一代的發(fā)展而來的,每一代比上一代擴充了一些功能,改進了一些性能??v觀整個汽車的發(fā)展史,每一代汽車都是在上一代汽車的特征和行為的基礎(chǔ)之上,進行了設(shè)計和改良。這其中有些功能沒有改變,有些功能是新增的,也有些功能經(jīng)過了改良。例如,從第一代的汽車到現(xiàn)在的汽車,做交通工具這一特點始終都在沿用。

生活中汽車的例子,與計算機中的繼承是非常相似的。這么一代又一代的更新是有好處的。

首先,節(jié)省了設(shè)計流程,不用閉門造車。

其次,在前一代汽車基礎(chǔ)之上設(shè)計,這樣原來重復(fù)的生產(chǎn)技術(shù)還可以復(fù)用,再設(shè)計一些新增的功能,這樣就能大大地提高生產(chǎn)效率。

下面介紹一個實際案例,來說明繼承的用處。

假設(shè)設(shè)計一個師生管理系統(tǒng),具有學(xué)生和教師兩種用戶,需要設(shè)計兩個類,一個學(xué)生類(Student),一個教師類(Teacher)。Student類有學(xué)號、姓名、性別、年齡、用戶名、密碼等屬性,Teacher類有姓名、性別、年齡、用戶名、密碼、學(xué)歷等屬性,這兩個類中都有屬性的getter和setter方法。由此可知,這兩個類中有許多相同的屬性和方法,也就是說代碼有冗余。為了避免這樣的情況,就可以使用繼承來優(yōu)化設(shè)計。將Student類和Teacher類中相同的屬性和方法抽取出來,單獨作為一個父類,這個父類稱為用戶類(User),而Student類和Teacher類作為子類繼承父類User。Student類和Teacher類中就只放自己特有的屬性和方法即可。由于這兩個類都繼承User類,因此User類中的屬性和方法,它們可以直接使用。需要指出的是,在繼承中私有屬性和私有方法是不能被繼承的。

繼承提高了代碼的重用性,減少了代碼和數(shù)據(jù)的冗余度。另外,如果要修改用戶名屬性,不采用繼承的情況下,兩個類的屬性都需要修改,而使用繼承后,只需要修改父類的用戶名屬性即可。由此可知,繼承使代碼的修改更加方便。

關(guān)于Python的基礎(chǔ)問題可以看下這個網(wǎng)頁的視頻教程,網(wǎng)頁鏈接,希望我的回答能幫到你。

Python中繼承的理解與運用?

9.5. 繼承

當(dāng)然,如果一種語言不支持繼承就,“類”就沒有什么意義。派生類的定義如下所示:

class DerivedClassName(BaseClassName):

命名 BaseClassName (示例中的基類名)必須與派生類定義在一個作用域內(nèi)。除了類,還可以用表達式,基類定義在另一個模塊中時這一點非常有用:

class DerivedClassName(modname.BaseClassName):

派生類定義的執(zhí)行過程和基類是一樣的。構(gòu)造派生類對象時,就記住了基類。這在解析屬性引用的時候尤其有用:如果在類中找不到請求調(diào)用的屬性,就搜索基類。如果基類是由別的類派生而來,這個規(guī)則會遞歸的應(yīng)用上去。

派生類的實例化沒有什么特殊之處: DerivedClassName() (示列中的派生類)創(chuàng)建一個新的類實例。方法引用按如下規(guī)則解析:搜索對應(yīng)的類屬性,必要時沿基類鏈逐級搜索,如果找到了函數(shù)對象這個方法引用就是合法的。

派生類可能會覆蓋其基類的方法。因為方法調(diào)用同一個對象中的其它方法時沒有特權(quán),基類的方法調(diào)用同一個基類的方法時,可能實際上最終調(diào)用了派生類中的覆蓋方法。(對于 C++ 程序員來說,Python 中的所有方法本質(zhì)上都是 虛 方法。)

派生類中的覆蓋方法可能是想要擴充而不是簡單的替代基類中的重名方法。有一個簡單的方法可以直接調(diào)用基類方法,只要調(diào)用: BaseClassName.methodname(self, arguments)。有時這對于客戶也很有用。(要注意只有 BaseClassName 在同一全局作用域定義或?qū)霑r才能這樣用。)

Python 有兩個用于繼承的函數(shù):

函數(shù) isinstance() 用于檢查實例類型: isinstance(obj, int) 只有在 obj.__class__ 是 int 或其它從 int 繼承的類型

函數(shù) issubclass() 用于檢查類繼承: issubclass(bool, int) 為 True,因為 bool 是 int 的子類。

然而, issubclass(float, int) 為 False,因為 float 不是 int 的子類。

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

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

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

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

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

類調(diào)用 Car.weight

實例化 car01=Car(5)

實例對象調(diào)用 car01.weght

我們在構(gòu)造類時,Python3默認我們繼承了object這個基類,我個人理解object就是個空的類,可以不用管為何要在括號中寫上object,這是Python3的特性,在python2中如果你沒有寫object的話不會默認繼承了object這個基類。

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

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

主函數(shù) :

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

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

說說 Python 的繼承

如果要編寫的類是另一個類的特殊版本時,那么就可以使用繼承 。原有的類稱為父類 , 新類稱為子類 。 子類繼承了父類的所有屬性和方法, 同時子類還可以自定義自己的屬性和方法。

定義子類的實例時, 可以通過 子類的 __init__() 方法,給父類的所有屬性賦值。

假設(shè)有這樣的一個 User 類:

接著,我們定義一個 Admin 類,讓它繼承 User 類:

運行結(jié)果:

super() 是一個特殊函數(shù), 它會把父類和子類關(guān)聯(lián)起來。因為父類也稱為超類 ( superclass),所以這個函數(shù)叫做 super。接著調(diào)用父類的 __init__() 方法, 讓子類包含父類的所有屬性。

子類除了擁有繼承父類而來的屬性和方法之外,還可以自定義子類自己的屬性和方法。

一般情況下,管理員賬號比普通賬號,擁有更高級別的權(quán)限。因此,我們?yōu)?Admin 定義一個有別于 User 的 privileges 屬性,并定義一個 “打印擁有的權(quán)限” 的新方法:

運行結(jié)果:

對于繼承而來的父類方法, 如果它不符合子類所期望的行為,那么就可以對其重寫。 只要在子類中定義一個與父類同名的方法,即可實現(xiàn)重寫。

User 本身定義了一個 “是否驗證通過” 的方法,Admin 是管理員,所以需要在打印日志中特別標注出來,這時就需要重寫父類定義的方法:

運行結(jié)果:

通過重寫父類方法, 我們就可以讓子類即可以保留或改寫從父類取其精華,棄其“糟粕”啦。

當(dāng)實體越來越復(fù)雜,對應(yīng)的類變得越來越大時, 我們可以將這個大型類拆分成多個可協(xié)同工作的小類。

比如,賬號權(quán)限,其實即使是普通賬號也是有某些權(quán)限的。所以我們把權(quán)限定義為一個類,然后在 Admin 中使用它:


網(wǎng)站題目:python函數(shù)繼承教學(xué),python繼承語法
分享路徑:http://weahome.cn/article/hopsdg.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部