最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python面向?qū)ο缶幊讨惖睦^承

 更新時間:2021年11月01日 14:34:04   作者:一碗周  
這篇文章主要介紹了Python面向?qū)ο缶幊讨惖睦^承,繼承Inheritance是指代碼復(fù)用的高級抽象,繼承是面向?qū)ο笤O(shè)計的精髓之一,實現(xiàn)了以類為單位的高級抽象級別代碼復(fù)用,下面進入文章看該內(nèi)容的下詳情

1、對繼承的理解

繼承(Inheritance) :代碼復(fù)用的高級抽象

  • 繼承是面向?qū)ο笤O(shè)計的精髓之一
  • 實現(xiàn)了以類為單位的高級抽象級別代碼復(fù)用
  • 繼承是新定義類能夠幾乎完全使用原有類屬性與方法的過程

不管是基類還是派生類,只是一種繼承說法,這都是普通的Python

也可以按子類、父類和超類劃分。

最基礎(chǔ)的類是基類,經(jīng)過一次繼承得出派生類,還可以再一次繼承,又得出一個派生類;現(xiàn)在最基礎(chǔ)的類和第一次繼承出來的派生類是父類與子類的關(guān)系,派生出來的類在最后一次派生出來的類也是父類與子類的關(guān)系,而最基本的類和最后一個派生類屬于超類和子類的關(guān)系

派生類不僅可以繼承一個基類,也可以繼承多個基類,這就是所說的多繼承的概念

2、類繼承的構(gòu)建

類繼承的時候在定義的時候聲明繼承關(guān)系,語法結(jié)構(gòu)如下

class <派生類名>(<基類名>):  # 基類名可以帶路徑:ModuleNama.BaseClassName
    def __init__(self, <參數(shù)列表>):
        <語句塊>
    ...

派生類可以直接使用基類的屬性和方法

  • 基類的屬性基本等于定義在派生類中
  • 派生類可以直接使用基類的類屬性、實例屬性
  • 派生類可以直接使用基類的各種方法
  • 使用基類的類方法和類屬性時,要用基類的類名調(diào)用

實例代碼:

class TestClass:
    def __init__(self, number):
        self.sum_number = 0
        for i in range(number + 1):
            self.sum_number += i

    def sum_num(self):
        return self.sum_number


class HumanNameClass(TestClass):
    def double_sum(self):
        return self.sum_number * 2  # 對基類屬性的使用


value1 = HumanNameClass(100)
print(value1.sum_num())  # 5050  # 對基類實例方法的使用
print(value1.double_sum())  # 10100  # 對派生類實例方法的使用

Python中有兩個與繼承關(guān)系判斷有關(guān)的函數(shù)

接上面的代碼,

print(isinstance(value1, TestClass))  # True
print(isinstance(value1, HumanNameClass))  # True
print(isinstance(value1, int))  # False
print(issubclass(HumanNameClass, TestClass))  # True
print(issubclass(TestClass, HumanNameClass))  # False

3、Python中最基礎(chǔ)的類

因為Python中萬物皆對象,任何一個類也是對象、Python的所有數(shù)據(jù)類型也對象;Python語言提供所有類的最基礎(chǔ)類是object。

  • objectPython最基礎(chǔ)類的名詞,不需要翻譯
  • 所有了定義時默認(rèn)繼承object
  • 保留屬性和保留方法本質(zhì)上是object類的屬性和方法

示例代碼:

print(object.__name__)  # 打印object的名字  # object
print(object.__bases__)  # 打印object所繼承的類名稱  # ()
print(object.__doc__)  # 打印object類描述  # The most base type
print(object.__module__)  # 打印object所在模塊的名稱  # builtins
print(object.__class__)  # object所對應(yīng)的類信息  # <class 'type'>

Python對象的三個要素:

  • 標(biāo)識 identity對象一旦構(gòu)建不會改變,用id()獲得,一般是內(nèi)存地址
  • 類型 type對象的類型,用type()獲得
  • value分為可變mutable與不可變immutable兩種

兩個和基礎(chǔ)類有關(guān)的Python內(nèi)置功能

函數(shù)/關(guān)鍵字 描述
id(x) 返回x的標(biāo)識。CPython 中 id() 函數(shù)用于獲取對象的內(nèi)存地址。
x is y 判斷x和y的標(biāo)識是否相等,返回True或False,不判斷值

4、ython類的重載

重載是派生類對基類屬性或方法的在定義

  • 屬性重載:派生類定義并使用了與基類相同名稱的屬性
  • 方法重載:派生類定義并使用了與基類相同名稱的方法

4.1 屬性重載

屬性重載采用就近覆蓋原則,重載無需特殊標(biāo)記。方法步驟

  • 優(yōu)先使用派生類重定義的屬性和方法
  • 然后尋找基類的屬性和方法
  • 在尋找超類的屬性和方法

實例代碼:

class TestClass:
    text = "這是基類的類屬性"

    def __init__(self, number):
        self.sum_number = 0
        for i in range(number + 1):
            self.sum_number += i

    def sum_num(self):
        return self.sum_number


class HumanNameClass(TestClass):
    text = "這是派生類的類屬性"  # 類屬性重載

    def __init__(self, number):
        self.sum_number = 1000  # 實例屬性重載

    def double_sum(self):
        return self.sum_number * 2


value1 = HumanNameClass(100)
print(TestClass.text)  # 這是基類的類屬性
print(value1.text)  # 這是派生類的類屬性
print(value1.sum_num())  # 1000

4.2 方法重載

方法重載是派生類對基類方法的在定義;分為完全重載和增量重載

完全重載:派生類完全重定義與基類相同名稱的方法

直接在派生類中定義同名方法即可

示例代碼:

class TestClass:
    def __init__(self, number):
        self.sum_number = 0
        for i in range(number + 1):
            self.sum_number += i

    def sum_num(self):
        return self.sum_number


class HumanNameClass(TestClass):

    def sum_num(self):  # 方法的重建
        return self.sum_number * 2


value1 = HumanNameClass(100)
print(value1.sum_num())  # 10100

增量重載:派生類擴展定義與基類相同名稱的方法,語法結(jié)構(gòu)

class <派生類名>(<基類名>):
    def <方法名>(self, <參數(shù)列表>):
        super().<基類方法名>(<參數(shù)列表>)
        ...

增量重載使用super()函數(shù)

示例代碼:

class TestClass:
    def test_text(self):
        print("這是基類的方法")


class TestClass1(TestClass):
    def test_text(self):  # 增量重載
        super().test_text()
        print("這是新增的方法里面的語句")


doc1 = TestClass()
doc2 = TestClass1()
print(doc1.test_text())
print(doc2.test_text())
'''
---輸出結(jié)果---
這是基類的方法
None   # 因為函數(shù)沒有返回值
這是基類的方法
這是新增的方法里面的語句
None  # 因為函數(shù)沒有返回值

'''

5、類的多繼承

多繼承的構(gòu)建是在定義時聲明繼承關(guān)系,語法結(jié)構(gòu)

class <類名>(<基類名1>, <基類名2>,..., <基類名N>):  # 基類名可以帶路徑:ModuleNama.BaseClassName
    def __init__(self, <參數(shù)列表>):
        <語句塊>
    ...

Python中多繼承采用深度優(yōu)先, 從左至右的方法。所謂深度優(yōu)先從左至右就是先從最左邊開始找,找到他的基類,如果基類沒有在往上面找,直到最基礎(chǔ)的object類時還沒有找到,才往右開始尋找。

所有屬性和方法的使用按照“深度優(yōu)先從左至右”的方式選取

構(gòu)造函數(shù)也參照上述原則,super()也參照上述原則

多個基類的順序是關(guān)鍵

示例代碼:

class Test1:
    def test(self):
        text = "這是基類1"
        return text


class Test2:
    def test(self):
        text = "這是基類2"
        return text


class Test3(Test1, Test2):
    pass


class Test4(Test2, Test1):
    pass


value1 = Test3()
value2 = Test4()
print(value1.test())  # 這是基類1
print(value2.test())  # 這是基類2

循序決定輸出的結(jié)果

對繼承概念的理解,類繼承的構(gòu)建,了解了objectPython中最基礎(chǔ)的類

類屬性的重載原則是最近覆蓋原則

類方法的重載:重新重載的話類似類屬性的重載;增量重載使用super()函數(shù)

多繼承采用的方法是深度優(yōu)先,從左至右

到此這篇關(guān)于Python面向?qū)ο缶幊讨惖睦^承的文章就介紹到這了,更多相關(guān)Python類的繼承內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python 如何引入同級包和模塊

    Python 如何引入同級包和模塊

    這篇文章主要介紹了Python 如何引入同級包和模塊,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • python怎么使用xlwt操作excel你知道嗎

    python怎么使用xlwt操作excel你知道嗎

    這篇文章主要為大家介紹了python使用xlwt操作excel的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-01-01
  • python性能測試手機號驗證碼登錄壓測示例詳解

    python性能測試手機號驗證碼登錄壓測示例詳解

    這篇文章主要為大家介紹了python性能測試手機號驗證碼登錄壓測的示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-07-07
  • Python腳本破解壓縮文件口令實例教程(zipfile)

    Python腳本破解壓縮文件口令實例教程(zipfile)

    這篇文章主要給大家介紹了關(guān)于Python腳本破解壓縮文件口令(zipfile)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用Python具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-06-06
  • openCV提取圖像中的矩形區(qū)域

    openCV提取圖像中的矩形區(qū)域

    這篇文章主要為大家詳細(xì)介紹了openCV提取圖像中的矩形區(qū)域,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-07-07
  • Python如何在main中調(diào)用函數(shù)內(nèi)的函數(shù)方式

    Python如何在main中調(diào)用函數(shù)內(nèi)的函數(shù)方式

    這篇文章主要介紹了Python如何在main中調(diào)用函數(shù)內(nèi)的函數(shù)方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-06-06
  • Python檢測字符串中是否包含某字符集合中的字符

    Python檢測字符串中是否包含某字符集合中的字符

    這篇文章主要介紹了Python檢測字符串中是否包含某字符集合中的字符,需要的朋友可以參考下
    2015-05-05
  • Python實戰(zhàn)整活之聊天機器人

    Python實戰(zhàn)整活之聊天機器人

    這篇文章主要介紹了Python實戰(zhàn)整活之聊天機器人,文中有非常詳細(xì)的代碼示例,對正在學(xué)習(xí)python的小伙伴們有非常好的幫助,需要的朋友可以參考下
    2021-04-04
  • Python編程基礎(chǔ)之構(gòu)造方法和析構(gòu)方法詳解

    Python編程基礎(chǔ)之構(gòu)造方法和析構(gòu)方法詳解

    這篇文章主要為大家詳細(xì)介紹了Python的構(gòu)造方法和析構(gòu)方法,使用Python編程基礎(chǔ),文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • Python 實現(xiàn)鏈表實例代碼

    Python 實現(xiàn)鏈表實例代碼

    這篇文章主要介紹了Python 實現(xiàn)鏈表實例代碼的相關(guān)資料,需要的朋友可以參考下
    2017-04-04

最新評論

来安县| 苍山县| 嘉善县| 台北市| 巧家县| 乌审旗| 屏山县| 定西市| 无锡市| 宁陵县| 通辽市| 永年县| 阜平县| 北辰区| 盘山县| 封丘县| 福州市| 田阳县| 奉节县| 高密市| 沾益县| 大悟县| 营山县| 阿荣旗| 土默特左旗| 孟州市| 塘沽区| 独山县| 武宁县| 太和县| 南木林县| 玛沁县| 岳池县| 泽库县| 崇信县| 镇坪县| 宜兴市| 驻马店市| 富裕县| 滦南县| 文化|