Python面向?qū)ο蟪绦蛟O(shè)計(jì)之繼承、多態(tài)原理與用法詳解
本文實(shí)例講述了Python面向?qū)ο蟪绦蛟O(shè)計(jì)之繼承、多態(tài)原理與用法。分享給大家供大家參考,具體如下:
相關(guān)內(nèi)容:
繼承:多繼承、super、__init__、重寫(xiě)父類(lèi)變量或函數(shù)
多態(tài)
繼承:
- 在Python3中,不寫(xiě)基類(lèi)的類(lèi)默認(rèn)繼承object
- 繼承就是子類(lèi)獲得了父類(lèi)的全部功能:比如學(xué)生和老師都有“姓名,性別,年齡、ID”等學(xué)校人員屬性,如果學(xué)生和老師都直接繼承學(xué)校人員的“姓名,性別,年齡、ID”,那么就不必要在學(xué)生類(lèi)和老師類(lèi)中重復(fù)定義了。
- 繼承指定類(lèi)的方式是:class 類(lèi)名(基類(lèi)名)

class SchoolPerson:
def study(self):
print("it's time to study")
class Student(SchoolPerson):#繼承的方法
pass
a=Student()
a.study()
----------------------
結(jié)果:
it's time to study
上述結(jié)果顯示,Student繼承了SchoolPerson中的study函數(shù)
- python支持多繼承:class SubClassName (ParentClass1[, ParentClass2, ...]):
- 對(duì)象對(duì)于屬性【包括變量和函數(shù)】的查找路徑:本實(shí)例對(duì)象--》本類(lèi)--》基類(lèi)【如果有多個(gè)基類(lèi),從左到右到基類(lèi)中查找】
- 可以調(diào)用基類(lèi)的__init__方法:
- 方式有兩種:
,建議使用super,避免錯(cuò)誤使用多次基類(lèi)的__init__
- 方式有兩種:
class SchoolPerson:
def __init__(self,name,age,sex,mid):
self.name=name
self.age=age
self.sex=sex
self.mid=mid
def study(self):
print("it's time to study")
class Student(SchoolPerson):#繼承的方法
def __init__(self,name,age,sex,mid,grade):
# super(Student,self).__init__(name,age,sex,mid)
SchoolPerson.__init__(self,name,age,sex,mid)
self.grade=grade
def study(self):
print("i am student,i want to study")
a=Student('A',18,'m','001',1)
a.study()
print(a.name,a.age,a.mid,a.grade)
- 對(duì)于多繼承中的調(diào)用基類(lèi)的__init__:無(wú)論多少個(gè)基類(lèi),也只會(huì)調(diào)用一次基類(lèi)的__init__



- 可以覆蓋父類(lèi)中屬性【變量、函數(shù)】:
class SchoolPerson:
def __init__(self,name,age,sex,mid):
self.name=name
self.age=age
self.sex=sex
self.mid=mid
def study(self):
print("it's time to study")
class Student(SchoolPerson):#繼承的方法
def __init__(self,name,age,sex,mid,grade):
super(Student,self).__init__(name,age,sex,mid)
self.grade=grade
def study(self):
print("i am student,i want to study")
a=Student('A',18,'m','001',1)
a.study()
--------------------------
結(jié)果:
i am student,i want to study
多態(tài):

- python是否具有多態(tài)具有爭(zhēng)議性。
- 但不論是否具有,這并不影響我們的具體使用。
class Animal:
def __init__(self, name):
self.name = name
def talk(self):
pass
@staticmethod ####如果硬要說(shuō)多態(tài),建議使用靜態(tài)方法來(lái)處理,而非普通函數(shù)
def animal_talk(obj):
obj.talk()
class Cat(Animal):
def talk(self):
print('喵!')
class Dog(Animal):
def talk(self):
print('wang')
d = Dog("小黑")
c = Cat("小白")
# def animal_talk(obj):
# obj.talk() ###這也是一個(gè)能實(shí)現(xiàn)功能的函數(shù),因此python多態(tài)才具有爭(zhēng)議性
Animal.animal_talk(c)
Animal.animal_talk(d)
更多關(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ì)有所幫助。
- Python面向?qū)ο蟪绦蛟O(shè)計(jì)之私有變量,私有方法原理與用法分析
- Python面向?qū)ο蟪绦蛟O(shè)計(jì)之靜態(tài)方法、類(lèi)方法、屬性方法原理與用法分析
- Python面向?qū)ο蟪绦蛟O(shè)計(jì)之類(lèi)和對(duì)象、實(shí)例變量、類(lèi)變量用法分析
- Python3.5面向?qū)ο蟪绦蛟O(shè)計(jì)之類(lèi)的繼承和多態(tài)詳解
- Python面向?qū)ο蟪绦蛟O(shè)計(jì)類(lèi)的多態(tài)用法詳解
- Python面向?qū)ο蟪绦蛟O(shè)計(jì)類(lèi)的封裝與繼承用法示例
- Python面向?qū)ο蟪绦蛟O(shè)計(jì)類(lèi)變量與成員變量、類(lèi)方法與成員方法用法分析
- Python面向?qū)ο蟪绦蛟O(shè)計(jì)構(gòu)造函數(shù)和析構(gòu)函數(shù)用法分析
- Python面向?qū)ο蟮某绦蛟O(shè)計(jì)詳情
相關(guān)文章
python numpy實(shí)現(xiàn)文件存取的示例代碼
這篇文章主要介紹了python numpy實(shí)現(xiàn)文件存取的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-05-05
在Python中實(shí)現(xiàn)貪婪排名算法的教程
這篇文章主要介紹了在Python中實(shí)現(xiàn)貪婪排名算法的教程,也是對(duì)學(xué)習(xí)算法的一個(gè)很好的演示,需要的朋友可以參考下2015-04-04
linux上運(yùn)行python腳本,SyntaxError:?invalid?syntax的解決
這篇文章主要介紹了linux上運(yùn)行python腳本,SyntaxError:?invalid?syntax的解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-12-12
python 數(shù)據(jù)生成excel導(dǎo)出(xlwt,wlsxwrite)代碼實(shí)例
這篇文章主要介紹了python 數(shù)據(jù)生成excel導(dǎo)出(xlwt,wlsxwrite)代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-08-08
pandas刪除某行或某列數(shù)據(jù)的實(shí)現(xiàn)示例
本文主要介紹了pandas刪除某行或某列數(shù)據(jù)的實(shí)現(xiàn)示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-08-08
基于tensorflow for循環(huán) while循環(huán)案例
這篇文章主要介紹了基于tensorflow for循環(huán) while循環(huán)案例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-06-06
flask使用session保存登錄狀態(tài)及攔截未登錄請(qǐng)求代碼
這篇文章主要介紹了flask使用session保存登錄狀態(tài)及攔截未登錄請(qǐng)求代碼,具有一定借鑒價(jià)值,需要的朋友可以參考下2018-01-01

