python函數(shù)參數(shù)繼承 python函數(shù)的繼承

Python中的繼承是什么意思?

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

創(chuàng)新互聯(lián)公司主要從事成都網(wǎng)站制作、做網(wǎng)站、外貿(mào)營(yíng)銷網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計(jì)、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)仲巴,十余年網(wǎng)站建設(shè)經(jīng)驗(yàn),價(jià)格優(yōu)惠、服務(wù)專業(yè),歡迎來電咨詢建站服務(wù):18980820575

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

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

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

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

下面介紹一個(gè)實(shí)際案例,來說明繼承的用處。

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

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

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

又來求助了,大神求解答 python類繼承的問題

一、類定義:

class 類名:

語句

類實(shí)例化后,可以使用其屬性,實(shí)際上,創(chuàng)建一個(gè)類之后,可以通過類名訪問其屬性

如果直接使用類名修改其屬性,那么將直接影響到已經(jīng)實(shí)例化的對(duì)象

類的私有屬性:

__private_attrs 兩個(gè)下劃線開頭,聲明該屬性為私有,不能在類地外部被使用或直接訪問

在類內(nèi)部的方法中使用時(shí) self.__private_attrs

類的方法

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

私有的類方法

__private_method 兩個(gè)下劃線開頭,聲明該方法為私有方法,不能在類地外部調(diào)用

在類的內(nèi)部調(diào)用slef.__private_methods

類的專有方法:

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

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

__repr__ 打印,轉(zhuǎn)換

__setitem__按照索引賦值

__getitem__按照索引獲取值

__len__獲得長(zhǎng)度

__cmp__比較運(yùn)算

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

__add__加運(yùn)算

__sub__減運(yùn)算

__mul__乘運(yùn)算

__div__除運(yùn)算

__mod__求余運(yùn)算

__pow__稱方

示例:

#類定義

class people:

#定義基本屬性

name = ''

age = 0

#定義私有屬性,私有屬性在類外部無法直接進(jìn)行訪問

__weight = 0

#定義構(gòu)造方法

def __init__(self,n,a,w):

self.name = n

self.age = a

self.__weight = w

def speak(self):

print("%s is speaking: I am %d years old" %(self.name,self.age))

p = people('tom',10,30)

p.speak()

二、繼承類定義:

1.單繼承

class 類名(父類名)

語句

eg.

class childbook(book)

age = 10

2.類的多重繼承

class 類名(父類1,父類2,....,父類n)

語句1

需要注意圓括號(hào)中父類的順序,若是父類中有相同的方法名,而在子類使用時(shí)未指定,python從左至右搜索,即方法在子類中未找到時(shí),從左到右查找父類中是否包含方法

#另一個(gè)類,多重繼承之前的準(zhǔn)備

class speaker():

topic = ''

name = ''

def __init__(self,n,t):

self.name = n

self.topic = t

def speak(self):

print("I am %s,I am a speaker!My topic is %s"%(self.name,self.topic))

#多重繼承

class sample(speaker,student):

a =''

def __init__(self,n,a,w,g,t):

student.__init__(self,n,a,w,g)

speaker.__init__(self,n,t)

test = sample("Tim",25,80,4,"Python")

test.speak()#方法名同,默認(rèn)調(diào)用的是在括號(hào)中排前地父類的方法

類方法的覆寫——子類覆蓋掉父類的方法

def 方法名與父類一致

若是在方法中要使用到父類方法 父類名.方法名

若是將類放到了模塊中

使用時(shí)

import A

l = A.類()

python中的繼承和多態(tài)?

繼承:在已有類的基礎(chǔ)上創(chuàng)建新類,這其中的一種做法就是讓一個(gè)類從另一個(gè)類那里將屬性和方法直接繼承下來,從而減少重復(fù)代碼的編寫。

1.提供繼承信息的我們稱之為父類,也叫超類或基類;2.得到繼承信息的我們稱之為子類,也叫派生類或衍生類。3.子類除了繼承父類提供的屬性和方法,還可以定義自己特有的屬性和方法,所以子類比父類擁有的更多的能力

多態(tài):子類在繼承了父類的方法后,通過方法重寫我們可以讓父類的同一個(gè)行為在子類中擁有不同的實(shí)現(xiàn)版本,這個(gè)就是多態(tài)。

Python中繼承的理解與運(yùn)用?

9.5. 繼承

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

class DerivedClassName(BaseClassName):

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

class DerivedClassName(modname.BaseClassName):

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

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

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

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

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

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

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

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

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函數(shù)參數(shù)繼承 python函數(shù)的繼承
鏈接地址:http://www.muchs.cn/article28/doseojp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站建設(shè)、商城網(wǎng)站自適應(yīng)網(wǎng)站、微信小程序、品牌網(wǎng)站設(shè)計(jì)手機(jī)網(wǎng)站建設(shè)

廣告

聲明:本網(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)

網(wǎng)站建設(shè)網(wǎng)站維護(hù)公司