欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python面向?qū)ο缶幊讨?lèi)的繼承

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

1、對(duì)繼承的理解

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

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

不管是基類(lèi)還是派生類(lèi),只是一種繼承說(shuō)法,這都是普通的Python類(lèi)

也可以按子類(lèi)、父類(lèi)和超類(lèi)劃分。

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

派生類(lèi)不僅可以繼承一個(gè)基類(lèi),也可以繼承多個(gè)基類(lèi),這就是所說(shuō)的多繼承的概念

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

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

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

派生類(lèi)可以直接使用基類(lèi)的屬性和方法

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

實(shí)例代碼:

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  # 對(duì)基類(lèi)屬性的使用


value1 = HumanNameClass(100)
print(value1.sum_num())  # 5050  # 對(duì)基類(lèi)實(shí)例方法的使用
print(value1.double_sum())  # 10100  # 對(duì)派生類(lèi)實(shí)例方法的使用

Python中有兩個(gè)與繼承關(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ǔ)的類(lèi)

因?yàn)?code>Python中萬(wàn)物皆對(duì)象,任何一個(gè)類(lèi)也是對(duì)象、Python的所有數(shù)據(jù)類(lèi)型也對(duì)象;Python語(yǔ)言提供所有類(lèi)的最基礎(chǔ)類(lèi)是object

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

示例代碼:

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

Python對(duì)象的三個(gè)要素:

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

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

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

4、ython類(lèi)的重載

重載是派生類(lèi)對(duì)基類(lèi)屬性或方法的在定義

  • 屬性重載:派生類(lèi)定義并使用了與基類(lèi)相同名稱(chēng)的屬性
  • 方法重載:派生類(lèi)定義并使用了與基類(lèi)相同名稱(chēng)的方法

4.1 屬性重載

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

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

實(shí)例代碼:

class TestClass:
    text = "這是基類(lèi)的類(lèi)屬性"

    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 = "這是派生類(lèi)的類(lèi)屬性"  # 類(lèi)屬性重載

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

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


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

4.2 方法重載

方法重載是派生類(lèi)對(duì)基類(lèi)方法的在定義;分為完全重載和增量重載

完全重載:派生類(lèi)完全重定義與基類(lèi)相同名稱(chēng)的方法

直接在派生類(lèi)中定義同名方法即可

示例代碼:

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

增量重載:派生類(lèi)擴(kuò)展定義與基類(lèi)相同名稱(chēng)的方法,語(yǔ)法結(jié)構(gòu)

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

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

示例代碼:

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


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


doc1 = TestClass()
doc2 = TestClass1()
print(doc1.test_text())
print(doc2.test_text())
'''
---輸出結(jié)果---
這是基類(lèi)的方法
None   # 因?yàn)楹瘮?shù)沒(méi)有返回值
這是基類(lèi)的方法
這是新增的方法里面的語(yǔ)句
None  # 因?yàn)楹瘮?shù)沒(méi)有返回值

'''

5、類(lèi)的多繼承

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

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

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

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

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

多個(gè)基類(lèi)的順序是關(guān)鍵

示例代碼:

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


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


class Test3(Test1, Test2):
    pass


class Test4(Test2, Test1):
    pass


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

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

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

類(lèi)屬性的重載原則是最近覆蓋原則

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

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

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

相關(guān)文章

  • Pygame Transform圖像變形的實(shí)現(xiàn)示例

    Pygame Transform圖像變形的實(shí)現(xiàn)示例

    pygame.transform 模塊允許您對(duì)加載、創(chuàng)建后的圖像進(jìn)行一系列操作,比如調(diào)整圖像大小、旋轉(zhuǎn)圖片等操作,感興趣的可以了解一下
    2021-11-11
  • np.concatenate()函數(shù)數(shù)組序列參數(shù)的實(shí)現(xiàn)

    np.concatenate()函數(shù)數(shù)組序列參數(shù)的實(shí)現(xiàn)

    本文主要介紹了np.concatenate()函數(shù)數(shù)組序列參數(shù)的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03
  • selenium自動(dòng)化測(cè)試簡(jiǎn)單準(zhǔn)備

    selenium自動(dòng)化測(cè)試簡(jiǎn)單準(zhǔn)備

    本文主要介紹了selenium自動(dòng)化測(cè)試簡(jiǎn)單準(zhǔn)備,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • 深入了解Python中的變量類(lèi)型標(biāo)注

    深入了解Python中的變量類(lèi)型標(biāo)注

    變量類(lèi)型注解是用來(lái)對(duì)變量和函數(shù)的參數(shù)返回值類(lèi)型做注解,讓調(diào)用方減少類(lèi)型方面的錯(cuò)誤,也可以提高代碼的可讀性和易用性。本文就來(lái)和大家聊聊Python中的變量類(lèi)型標(biāo)注吧
    2023-04-04
  • python如何開(kāi)啟多線(xiàn)程

    python如何開(kāi)啟多線(xiàn)程

    這篇文章主要介紹了python如何開(kāi)啟多線(xiàn)程問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • FP-growth算法發(fā)現(xiàn)頻繁項(xiàng)集——發(fā)現(xiàn)頻繁項(xiàng)集

    FP-growth算法發(fā)現(xiàn)頻繁項(xiàng)集——發(fā)現(xiàn)頻繁項(xiàng)集

    常見(jiàn)的挖掘頻繁項(xiàng)集算法有兩類(lèi),一類(lèi)是Apriori算法,另一類(lèi)是FP-growth。Apriori通過(guò)不斷的構(gòu)造候選集、篩選候選集挖掘出頻繁項(xiàng)集,需要多次掃描原始數(shù)據(jù),當(dāng)原始數(shù)據(jù)較大時(shí),磁盤(pán)I/O次數(shù)太多,效率比較低下
    2021-06-06
  • pandas中concatenate和combine_first的用法詳解

    pandas中concatenate和combine_first的用法詳解

    本文主要介紹了pandas中concatenate和combine_first的用法詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-01-01
  • 淺談Python中對(duì)象是如何被調(diào)用的

    淺談Python中對(duì)象是如何被調(diào)用的

    本文主要介紹了淺談Python中對(duì)象是如何被調(diào)用的,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-04-04
  • python實(shí)現(xiàn)批量修改文件名

    python實(shí)現(xiàn)批量修改文件名

    這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)批量修改文件名,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-03-03
  • PyTorch兩種安裝方法

    PyTorch兩種安裝方法

    這篇文章主要介紹了PyTorch兩種安裝方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-03-03

最新評(píng)論