欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

python中的繼承是什么意思

小編給大家分享一下python中的繼承是什么意思,相信大部分人都還不怎么了解,因此分享這篇文章給大家學(xué)習(xí),希望大家閱讀完這篇文章后大所收獲,下面讓我們一起去學(xué)習(xí)方法吧!

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

面向?qū)ο笳Z(yǔ)言的一個(gè)特性就是類的繼承。繼承的關(guān)系跟人類繁衍的關(guān)系相似,被繼承的類稱為基類(也叫做父類),繼承而得的類叫派生類(也叫子類),這種關(guān)系就像人類的父子關(guān)系。

類的繼承,說(shuō)明了不同類直接的關(guān)系,派生類復(fù)用了基類的代碼同時(shí)也繼承了基類的屬性和方法。派生類定義的語(yǔ)法如下:

派生類的定義

class DerivedClassName(BaseClassName):
    語(yǔ)句1
    ...
    語(yǔ)句n

下面我們根據(jù)這個(gè)語(yǔ)法來(lái)寫一個(gè)繼承的例子:

class Person:
    def __init__(self, name, age, height):
        self.name = name
        self.age = age
        self.height = height
    def look(self):
        print(self.name, 'is looking')
    def walk(self):
        print(self.name, 'is walking')
class Teacher(Person):
    def __init__(self, name, age, height):
        super().__init__(name, age, height)
    def teach(self):
        print(self.name, 'is teaching')
class Student(Person):
    def __init__(self, name, age, height):
        super().__init__(name, age, height)
    def learn(self):
        print(self.name, 'is learning')
if __name__ == '__main__':
    teacher = Teacher('Tom', 31, 178)
    s1 = Student('Jim', 12, 160)
    s2 = Student('Kim', 13, 162)
    teacher.look()
    teacher.walk()
    teacher.teach()
    print('==='*5)
    s1.look()
    s1.walk()
    s1.learn()
    print('==='*5)
    s2.look()
    s2.walk()
    s2.learn()

我們定義了一個(gè)基類Person,這個(gè)人有名字(name)、年齡(age)和身高(height)三個(gè)屬性,還有l(wèi)ook(), walk()兩個(gè)方法。由它派生出兩個(gè)類:Teacher和Student,這兩個(gè)派生類繼承了name, age, height屬性,也繼承了look(), walk()方法。但它們又有自己獨(dú)有的方法,Teacher可以teach(),Student可以learn()。

運(yùn)行這個(gè)示例代碼,可以得到下面的信息:

Tom is looking
Tom is walking
Tom is teaching
===============
Jim is looking
Jim is walking
Jim is learning
===============
Kim is looking
Kim is walking
Kim is learning

派生類定義的執(zhí)行過(guò)程與基類相同。 當(dāng)構(gòu)造類對(duì)象時(shí),基類會(huì)被記住。 此信息將被用來(lái)解析屬性引用:如果請(qǐng)求的屬性在類中找不到,搜索將轉(zhuǎn)往基類中進(jìn)行查找。 如果基類本身也派生自其他某個(gè)類,則此規(guī)則將被遞歸地應(yīng)用。

派生類的實(shí)例化會(huì)創(chuàng)建該類的一個(gè)新實(shí)例。方法引用將按以下方式解析:搜索相應(yīng)的類屬性,如果搜索的方法在派生類中找不到,就去基類中進(jìn)行查找,如果基類本身也派生自其它類,則此規(guī)則將被遞歸地應(yīng)用。如果搜索到了一個(gè)函數(shù)對(duì)象則方法引用就生效。

比如,Teacher中并沒(méi)有定義look(),當(dāng)我們調(diào)用方法teacher.look()的時(shí)候會(huì)在它的基類Person中找到并調(diào)用look()。

重載基類方法

派生類可以重載基類的方法。重載,就是重新定義。如果派生類中重新定義了基類的某方法,那么派生類的重載的這個(gè)方法就會(huì)覆蓋基類中的同名方法。

例如,我們定義Student時(shí)可以重載walk()方法,讓它擁有Student特征:

class Student(Person):
    def __init__(self, name, age, height):
        super().__init__(name, age, height)
    def learn(self):
        print(self.name, 'is learning')
    def walk(self):
        print('Student:', self.name, 'is walking')

再次運(yùn)行s1.walk()時(shí),就會(huì)打印下面的信息:

Student: Jim is walking

Python有兩個(gè)內(nèi)置函數(shù)可被用于檢查繼承機(jī)制:

isinstance()來(lái)檢查一個(gè)實(shí)例的類型:isinstance(obj, int)僅僅會(huì)在obj.__class__為int或某個(gè)派生自int的類時(shí)為True。issubclass()來(lái)檢查類的繼承關(guān)系:issubclass(bool, int)為True,因?yàn)閎ool是int的子類。但是,issubclass(float, int)為False,因?yàn)閒loat不是int的子類。

多重繼承

多重繼承的意思就是,一個(gè)派生類同時(shí)派生自多個(gè)基類,繼承它們?nèi)繉傩院头椒āK亩x形式是:

class DerivedClassName(Base1, Base2, Base3):
    語(yǔ)句1
    ...
    語(yǔ)句1

對(duì)于多數(shù)應(yīng)用來(lái)說(shuō),在最簡(jiǎn)單的情況下,你可以認(rèn)為搜索從父類所繼承屬性的操作是深度優(yōu)先、從左至右的,當(dāng)層次結(jié)構(gòu)中存在重疊時(shí)不會(huì)在同一個(gè)類中搜索兩次。 因此,如果某一屬性在 DerivedClassName 中未找到,則會(huì)到 Base1 中搜索它,然后(遞歸地)到 Base1 的基類中搜索,如果在那里未找到,再到 Base2 中搜索,依此類推。

真實(shí)情況比這個(gè)更復(fù)雜一些;方法解析順序會(huì)動(dòng)態(tài)改變以支持對(duì) super() 的協(xié)同調(diào)用。 這種方式在某些其他多重繼承型語(yǔ)言中被稱為后續(xù)方法調(diào)用,它比單繼承型語(yǔ)言中的 super 調(diào)用更強(qiáng)大。

比如,我們要定義一個(gè)“助教”類,助教是幫助老師教學(xué)的高年級(jí)同學(xué)。他兼具老師和學(xué)生的特點(diǎn),我們可以讓這個(gè)類多重繼承“老師類”和“學(xué)生類”。

私有變量

我們上一節(jié)講過(guò),Python中沒(méi)有類似C++中的“私有變量”。但是,大多數(shù)Python代碼都遵循這樣一個(gè)約定(只是約定但很重要):帶有一個(gè)下劃線的名稱(例如:_name)應(yīng)當(dāng)被動(dòng)作是API的非僅供部分(無(wú)論它是函數(shù)、方法或是數(shù)據(jù)成員)。 這應(yīng)當(dāng)被視為一個(gè)實(shí)現(xiàn)細(xì)節(jié),可能不經(jīng)通知即加以改變。

由于存在對(duì)于類私有成員的有效使用場(chǎng)景(例如避免名稱與子類所定義的名稱相沖突),因此存在對(duì)此種機(jī)制的有限支持,稱為名稱改寫。 任何形式為_(kāi)_name的標(biāo)識(shí)符(至少帶有兩個(gè)前綴下劃線,至多一個(gè)后綴下劃線)的文本將被替換為_(kāi)classname__name,其中classname為去除了前綴下劃線的當(dāng)前類名稱。這種改寫不考慮標(biāo)識(shí)符的句法位置,只要它出現(xiàn)在類定義內(nèi)部就會(huì)進(jìn)行。

名稱改寫有助于讓子類重載方法而不破壞類內(nèi)方法調(diào)用。例如:

class MyList:
    def __init__(self, iterable):
        self.items_list = []
        self.__update(iterable)
    def update(self, iterable):
        for item in iterable:
            self.items_list.append(item)
    __update = update   # 把update()拷貝給私有方法
class MyListSubclass(MyList):
    def update(self, keys, values):
        # 重載 update()
        # 但不會(huì)破壞 __init__()
        for item in zip(keys, values):
            self.items_list.append(item)

這個(gè)示例中即使正在MyListSubclass引入一個(gè)__update標(biāo)識(shí)符的情況下也不會(huì)出錯(cuò),因?yàn)樗鼤?huì)在MyList類中被替換為_(kāi)MyList__update,而在MyListSubclass類中被替換為_(kāi)MyListSubclass__update。

改寫規(guī)則的設(shè)計(jì)主要是為了避免意外沖突;訪問(wèn)或修改被視為私有的變量仍然是可能的。這在特殊情況下甚至?xí)苡杏茫缭谡{(diào)試器中。

請(qǐng)注意傳遞給 exec() 或 eval() 的代碼不會(huì)將發(fā)起調(diào)用類的類名視作當(dāng)前類;這類似于 global 語(yǔ)句的效果,因此這種效果僅限于同時(shí)經(jīng)過(guò)字節(jié)碼編譯的代碼。 同樣的限制也適用于 getattr(), setattr() 和 delattr(),以及對(duì)于 dict 的直接引用。

類的繼承體現(xiàn)了類的關(guān)系,基類的屬性和方法可以被派生類繼承,同時(shí)派生類又可以重載基類的方法。派生類既可以單獨(dú)繼承一個(gè)基類,也可以多重繼承多個(gè)基類。Python的類沒(méi)有真正意義上的私有變量,通過(guò)約定和名稱改寫來(lái)有限支持私有變量。

以上是python中的繼承是什么意思的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!

本文名稱:python中的繼承是什么意思
文章鏈接:http://www.chinadenli.net/article30/gisiso.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站設(shè)計(jì)公司ChatGPT網(wǎng)站排名外貿(mào)建站軟件開(kāi)發(fā)移動(dòng)網(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í)需注明來(lái)源: 創(chuàng)新互聯(lián)

手機(jī)網(wǎng)站建設(shè)