0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

python類的繼承詳解

python爬蟲知識(shí)分享 ? 來(lái)源:python爬蟲知識(shí)分享 ? 作者:python爬蟲知識(shí)分享 ? 2022-03-08 16:40 ? 次閱讀

python類的繼承

類的繼承,跟人類繁衍的關(guān)系相似。

被繼承的類稱為基類(也叫做父類),繼承而得的類叫派生類(也叫子類),這種關(guān)系就像人類的父子關(guān)系。

繼承最大的好處是子類獲得了父類的全部變量和方法的同時(shí),又可以根據(jù)需要進(jìn)行修改、拓展。

繼承的語(yǔ)法結(jié)構(gòu)是

class 子類(父類):

1. 單繼承

舉個(gè)例子:下面的代碼中。先是定義了一個(gè) People 類,里面有一個(gè) speak 方法。然后再定義一個(gè) Student 類,并繼承自 People 類。

# 父類定義
class People:
    def __init__(self, name, age, weight):
        self.name = name
        self.age = age

    def speak(self):
        print(f"{self.name} 說(shuō): 我{self.age}歲。")

# 單繼承示例
class Student(People):
    def __init__(self, name, age, weight, grade):
        # 調(diào)用父類的實(shí)例化方法
        People.__init__(self, name, age, weight)
        self.grade = grade

由于繼承的機(jī)制,Student 實(shí)例會(huì)擁有 People 類所有屬性和方法,比如下邊我可以直接調(diào)用 People 類的 speak 方法。

>>> xm = Student(name="小明", age=10, weight=50, grade="三年級(jí)")
>>> xm.speak()
小明 說(shuō): 我 10 歲。

你如果不想使用父類的方法,你可以重寫它以覆蓋父類的 speak 方法。

# 單繼承示例
class Student(People):
    def __init__(self, name, age, weight, grade):
        # 調(diào)用父類的實(shí)例化方法
        People.__init__(self, name, age, weight)
        self.grade = grade

    # 重寫父類的speak方法
    def speak(self):
        print(f"{self.name} 說(shuō): 我{self.age}歲了,我在讀{self.grade}")

此時(shí),再調(diào)用的話,就會(huì)調(diào)用自己的方法了

>>> xm = Student(name="小明", age=10, weight=50, grade="三年級(jí)")
>>> xm.speak()
小明 說(shuō): 我10歲了,我在讀三年級(jí)

2. 多繼承

Python 還支持多繼承,可以繼承自多個(gè)類。

class 子類(父類1, 父類2, 父類3...):

多繼承的話,情況會(huì)比單繼承復(fù)雜得多。

假設(shè)多個(gè)父類都有一個(gè) foo 方法,并且子類沒(méi)有重寫 foo 方法,那么 子類 的實(shí)例在調(diào)用 foo 方法時(shí),應(yīng)該使用哪個(gè)父類的 foo 方法呢?

關(guān)于這一點(diǎn),只要簡(jiǎn)單的做個(gè)驗(yàn)證就行啦。

有如下代碼,定義了 7 個(gè)類

class D:pass
class C(D):pass

class B(C):
    def show(self):
        print("i am B")

class G:pass
class F(G):pass

class E(F):
    def show(self):
        print("i am E")

class A(B, E):pass

運(yùn)行后的結(jié)果如下

>>> a = A()
>>> a.show()
i am B

在類A中,沒(méi)有show()這個(gè)方法,于是它只能去它的父類里查找,它首先在B類中找,結(jié)果找到了,于是直接執(zhí)行B類的show()方法。可見(jiàn),在A的定義中,繼承參數(shù)的書寫有先后順序,寫在前面的被優(yōu)先繼承。

3. 繼承順序

那如果B沒(méi)有show方法,而是D有呢?

class D:
    def show(self):
        print("i am D")

class C(D):pass
class B(C):pass


class G:pass
class F(G):pass

class E(F):
    def show(self):
        print("i am E")

class A(B, E):pass

執(zhí)行結(jié)果是

>>> a = A()
>>> a.show()
i am D

由此可見(jiàn),多繼承的順序使用的是從左向右再深度優(yōu)先的原則。

審核編輯:符乾江

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • python
    +關(guān)注

    關(guān)注

    55

    文章

    4768

    瀏覽量

    84376
  • 繼承
    +關(guān)注

    關(guān)注

    0

    文章

    10

    瀏覽量

    2688
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    java子類可以繼承的什么

    Java是一種面向?qū)ο蟮木幊陶Z(yǔ)言,它支持繼承的概念。繼承是面向?qū)ο缶幊痰娜筇匦灾唬试S一個(gè)(稱為子類或派生繼承另一個(gè)
    的頭像 發(fā)表于 08-20 11:02 ?779次閱讀

    python中open函數(shù)的用法詳解

    python中open函數(shù)的用法詳解 Python中的open()函數(shù)用于打開文件。它接受文件名和模式作為參數(shù),并返回一個(gè)文件對(duì)象。文件對(duì)象可用于讀取、寫入和管理文件。 open()函數(shù)的基本語(yǔ)法
    的頭像 發(fā)表于 01-30 15:31 ?1883次閱讀

    python運(yùn)行環(huán)境的安裝和配置

    Python是一種非常流行的編程語(yǔ)言,廣泛應(yīng)用于科學(xué)計(jì)算、Web開發(fā)、人工智能等領(lǐng)域。為了能夠正常運(yùn)行Python程序,我們需要先安裝和配置Python運(yùn)行環(huán)境。本文將為您詳盡介紹Python
    的頭像 發(fā)表于 11-29 16:17 ?1082次閱讀

    python軟件對(duì)電腦配置要求

    Python是一種流行的編程語(yǔ)言,它在許多不同的領(lǐng)域中被廣泛使用,例如網(wǎng)站開發(fā)、數(shù)據(jù)科學(xué)和機(jī)器學(xué)習(xí)等。對(duì)于使用Python的開發(fā)者來(lái)說(shuō),了解Python軟件的電腦配置要求是非常重要的。本文將詳細(xì)介紹
    的頭像 發(fā)表于 11-29 14:58 ?9657次閱讀

    python shell怎么用

    Python Shell是一種交互式解釋器,可以通過(guò)命令行直接運(yùn)行Python代碼。在Shell中,可以輸入一行代碼并立即得到結(jié)果,非常適合于測(cè)試、嘗試新代碼或進(jìn)行簡(jiǎn)單的任務(wù)。本文將詳細(xì)介紹
    的頭像 發(fā)表于 11-29 14:36 ?1065次閱讀

    python軟件怎么運(yùn)行代碼

    Python是一種高級(jí)編程語(yǔ)言,它被廣泛用于開發(fā)各種類型的應(yīng)用程序,從簡(jiǎn)單的腳本到復(fù)雜的網(wǎng)絡(luò)應(yīng)用和機(jī)器學(xué)習(xí)模型。要運(yùn)行Python代碼,您需要一個(gè)Python解釋器,它可以將您的代碼翻譯成計(jì)算機(jī)可以
    的頭像 發(fā)表于 11-28 16:02 ?843次閱讀

    如何運(yùn)行Python程序

    運(yùn)行Python程序非常簡(jiǎn)單。Python是一種解釋型語(yǔ)言,這意味著可以直接通過(guò)解釋器來(lái)執(zhí)行代碼。下面我將詳細(xì)介紹如何運(yùn)行Python程序。 一、安裝Python 在運(yùn)行
    的頭像 發(fā)表于 11-24 09:31 ?1121次閱讀

    python怎么運(yùn)行程序

    Python是一種廣泛使用的編程語(yǔ)言,它的簡(jiǎn)易和可讀性使得它成為初學(xué)者和專業(yè)開發(fā)人員的首選。在運(yùn)行Python程序之前,您需要安裝Python解釋器,然后按照以下步驟進(jìn)行操作。 步驟1:安裝
    的頭像 發(fā)表于 11-24 09:25 ?2465次閱讀

    Python2與Python3的差異

    Python2與Python3是兩個(gè)不同的版本,它們?cè)谡Z(yǔ)法、功能和性能等方面存在一些差異。下面是對(duì)Python2和Python3的詳盡、詳實(shí)、細(xì)致的比較,分為以下幾個(gè)方面: 語(yǔ)法差異:
    的頭像 發(fā)表于 11-23 16:48 ?876次閱讀

    python如何導(dǎo)入模塊

    Python是一種強(qiáng)大的編程語(yǔ)言,它支持模塊化編程,使得開發(fā)者可以將代碼分解為可重用且獨(dú)立的模塊。模塊是一個(gè)包含函數(shù)、和變量等定義的文件,我們可以使用import語(yǔ)句將這些模塊導(dǎo)入到我們的程序中
    的頭像 發(fā)表于 11-22 14:46 ?876次閱讀

    Python自帶的命令窗口

    Python自帶的命令窗口,也稱為Python交互式解釋器,是Python編程語(yǔ)言的一個(gè)重要工具,它允許用戶在命令行界面中輸入和執(zhí)行Python代碼。不同于編寫腳本并保存為文件后再執(zhí)行
    的頭像 發(fā)表于 11-22 14:02 ?859次閱讀

    python中number代表什么

    是正數(shù)、負(fù)數(shù)或零。整數(shù)類型在Python中有很多應(yīng)用場(chǎng)景,例如統(tǒng)計(jì)數(shù)據(jù)、索引、循環(huán)計(jì)數(shù)等。在Python中,整數(shù)
    的頭像 發(fā)表于 11-22 09:50 ?1829次閱讀

    java抽象可以有普通方法嗎

    時(shí)使用abstract關(guān)鍵字,我們可以將該方法聲明為抽象方法。抽象方法沒(méi)有具體的實(shí)現(xiàn),只是定義了方法的簽名。子類繼承抽象后必須實(shí)現(xiàn)所有的抽象方法,否則子類也需要被聲明為抽象。抽象方法的存在使得抽象
    的頭像 發(fā)表于 11-21 10:22 ?1436次閱讀

    如何理解java中的抽象

    Java中的抽象是一種特殊的,無(wú)法被實(shí)例化,只能被繼承。它是一個(gè)中間層的,位于具體和接口之間,用于定義通用的屬性和方法,并提供一些默
    的頭像 發(fā)表于 11-21 10:16 ?543次閱讀

    java接口是特殊的抽象

    的區(qū)別。 首先,從語(yǔ)法和定義上來(lái)看,接口和抽象是不同的。接口是用interface關(guān)鍵字定義的,而抽象是用abstract關(guān)鍵字定義的。根據(jù)Java語(yǔ)法,一個(gè)只能繼承自一個(gè)父
    的頭像 發(fā)表于 11-21 10:07 ?587次閱讀