亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

一文深入了解Python中的繼承知識(shí)點(diǎn)

 更新時(shí)間:2022年11月02日 09:01:21   作者:宇宙之一粟  
Python?是面向?qū)ο蟮木幊陶Z(yǔ)言,因此支持面向?qū)ο蟮娜筇匦灾唬豪^承。本文就帶大家了解了解Python中繼承的相關(guān)知識(shí)點(diǎn),感興趣的可以了解一下

1 類(lèi)繼承

Python 是面向?qū)ο蟮木幊陶Z(yǔ)言,因此支持面向?qū)ο蟮娜筇匦灾唬豪^承。

繼承是代碼重用的一種途徑,Python 中的繼承就像現(xiàn)實(shí)生活中的繼承一樣,子類(lèi)可以順利繼承父類(lèi)的屬性或方法。允許我們?cè)賹?duì)象之間創(chuàng)建復(fù)雜且類(lèi)似現(xiàn)實(shí)世界的關(guān)系。

繼承父類(lèi)的類(lèi)稱(chēng)為子類(lèi)、派生類(lèi)或擴(kuò)展類(lèi),被繼承的類(lèi)被稱(chēng)為父類(lèi)、超類(lèi)或基類(lèi)。

在之前的文中學(xué)到 Python 中的構(gòu)造函數(shù),并且每一個(gè)類(lèi)都有一個(gè)構(gòu)造函數(shù) __init__() ,在 Python 中任何類(lèi)都是繼承于最大的基類(lèi) Object,如下所示:

Python 3.10.4 (v3.10.4:9d38120e33, Mar 23 2022, 17:29:05) [Clang 13.0.0 (clang-1300.0.29.30)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> dir(object)
['__class__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__']
>>> 

Python 中繼承類(lèi)的語(yǔ)法如下:

class SubClass(SuperClass):

1.1 繼承的簡(jiǎn)單例子

先來(lái)看一個(gè)簡(jiǎn)單的繼承例子,假如有一個(gè) Car 類(lèi)繼承于更通用的類(lèi) Vehicle,然后也可以定義一個(gè) Motorcyle 類(lèi),繼承圖如下:

Python 代碼實(shí)現(xiàn)如上繼承關(guān)系,如下:

class Vehicle:

    def __init__(self, started =  False, speed = 0):
        self.started = started
        self.speed = speed

    def start(self):
        self.started = True
        print("啟動(dòng),皮皮蝦我們走")

    def stop(self):
        self.speed = 0

    def increaseSpeed(self, delta):
        if self.started:
            self.speed += delta
            print("Vroooooom!")
        else:
            print("還沒(méi)啟動(dòng)呢!")


class Car(Vehicle):
    trunk_open = False
    def open_trunk(self):
        self.trunk_open = True
    def close_trunk(self):
        self.trunk_open = False

我們的汽車(chē)?yán)^承了車(chē)輛類(lèi)的所有方法和變量,但添加了一個(gè)額外的變量和兩個(gè)方法來(lái)操作后備箱。

有時(shí)你想覆蓋繼承的 __init__() 函數(shù)。為了演示,我們可以創(chuàng)建一個(gè)摩托車(chē)類(lèi)。大多數(shù)摩托車(chē)都有一個(gè)中心支架。我們將在初始化時(shí)添加輸出或輸入的功能:

class Motorcycle(Vehicle):
    def __init__(self, center_start_out = False):
        self.center_start_out = center_start_out
        super().__init__()
   def start(self):
        print("Sorry, out of fuel!")

需要注意的是,在重寫(xiě)構(gòu)造函數(shù)時(shí),我們繼承的父類(lèi)的構(gòu)造函數(shù)不會(huì)被改變。如果想要更改這個(gè)功能,需要自己調(diào)用它。這是通過(guò) super() 函數(shù)完成返回父類(lèi)的引用,然后才能調(diào)用父類(lèi)的構(gòu)造函數(shù)。

class Vehicle:

    def __init__(self, started =  False, speed = 0):
        self.started = started
        self.speed = speed

    def start(self):
        self.started = True
        print("啟動(dòng),皮皮蝦我們走")

    def stop(self):
        self.speed = 0

    def increaseSpeed(self, delta):
        if self.started:
            self.speed += delta
            print("Vroooooom!")
        else:
            print("還沒(méi)啟動(dòng)呢!")


class Car(Vehicle):
    trunk_open = False
    def open_trunk(self):
        self.trunk_open = True
    def close_trunk(self):
        self.trunk_open = False

class Motorcycle(Vehicle):
    def __init__(self, center_start_out = False):
        self.center_start_out = center_start_out
        super().__init__()


V = Vehicle()
C = Car()
M = Motorcycle()

print(type(V))
print(type(C))
print(type(M))

print("摩托車(chē)是交通工具的實(shí)例嗎?",isinstance(M, Vehicle))

super() 函數(shù)返回一個(gè)代表父類(lèi)的臨時(shí)對(duì)象。這用于訪(fǎng)問(wèn)父類(lèi)的方法和屬性。在 super() 函數(shù)的幫助下,我們還可以訪(fǎng)問(wèn)被覆蓋的方法。

運(yùn)行上面代碼的結(jié)果如下:

2 繼承的類(lèi)型

2.1 單繼承

單繼承就是一個(gè)子類(lèi)只有一個(gè)基類(lèi)的繼承方式,顯示圖如下:

最基本的例子如下:

class Animal:
  print("我是動(dòng)物")

class Cat(Animal):
  print("我是貓")

2.2 多繼承

多繼承就是一個(gè)子類(lèi)可以繼承多個(gè)父類(lèi)的繼承方式,相對(duì)于單繼承來(lái)說(shuō),多繼承更復(fù)雜,容易造成菱形繼承問(wèn)題,即兩個(gè)父類(lèi)同時(shí)繼承了一個(gè)基類(lèi),而子類(lèi)會(huì)包含多個(gè)父類(lèi)的內(nèi)容,產(chǎn)生代碼歧義。

多繼承結(jié)構(gòu)圖:

語(yǔ)法結(jié)構(gòu)如下:

class A:
  def __init__(self, name):
    self.name = name

  def introduction(self):
    print("我叫", self.name)


class B:
  def __init__(self, age):
    self.age = age

  def introduction(self):
    print("我今年 %d 歲了" % self.age)


class C(A, B):
  pass


c = C(18)
c.introduction()

運(yùn)行代碼:

我叫 18

從上面的執(zhí)行結(jié)果來(lái)看,本來(lái)想介紹年齡,最后卻輸出了“我叫 18”,這種現(xiàn)象就是繼承順序?qū)е碌?,?lèi) A 在類(lèi) B 的前面,所以對(duì)于同名的屬性和方法子類(lèi)都會(huì)調(diào)用 類(lèi) A 的。

2.3 多級(jí)繼承

當(dāng)一個(gè)類(lèi)繼承一個(gè)子類(lèi)時(shí),它被稱(chēng)為多級(jí)繼承。繼承子類(lèi)的類(lèi)被稱(chēng)為孫子類(lèi)。多級(jí)繼承會(huì)導(dǎo)致孫子和子關(guān)系。孫子類(lèi)可以訪(fǎng)問(wèn)子類(lèi)和父類(lèi)的屬性。

多級(jí)繼承結(jié)構(gòu)圖:

class Parent:
    str1 = "Python"


class Child(Parent):
    str2 = " is the best programming?"


class GrandChild(Child):

    def get_str(self):
        print(self.str1 + self.str2)


person = GrandChild()
person.get_str()

運(yùn)行結(jié)果:

Python is the best programming?

在上面的代碼示例中,GrandChild 是 Child 的一個(gè)子類(lèi),而 Child 是 Parent 的一個(gè)子類(lèi)。因此,GrandChild 可以訪(fǎng)問(wèn)父類(lèi)和子類(lèi)的屬性。

2.4 分層繼承

當(dāng)多個(gè)類(lèi)繼承同一個(gè)類(lèi)時(shí),稱(chēng)為分層繼承。結(jié)構(gòu)圖如下:

代碼如下:

class SuperClass:
    x = 2022


class SubClass1(SuperClass):
    pass


class SubClass2(SuperClass):
    pass


class SubClass3(SuperClass):
    pass


a = SubClass1()
b = SubClass2()
c = SubClass3()
print(a.x, b.x, c.x)

運(yùn)行結(jié)果:

(2022, 2022, 2022)

2.5 Python中的混合繼承

一種以上繼承類(lèi)型的組合稱(chēng)為混合繼承。結(jié)構(gòu)圖如下:

代碼例子如下:

class X:
    num = 2023


class A(X):
    pass


class B(A):
    pass


class C(A):
    pass


class D(B, C):
    pass


ob = D()
print(D.num)

在上面的代碼示例中,我們結(jié)合了多級(jí)繼承、多重繼承和分層繼承,因此創(chuàng)建了混合繼承。輸出結(jié)果:

2023

3 總結(jié)

繼承允許我們定義繼承另一個(gè)類(lèi)的所有方法和屬性的類(lèi)。父類(lèi)是繼承的類(lèi),也稱(chēng)為基類(lèi)、派生類(lèi)。子類(lèi)是從另一個(gè)類(lèi)繼承的類(lèi),也稱(chēng)為派生類(lèi)。

本文介紹了 Python 的繼承方法和繼承的 5 種分類(lèi),并在簡(jiǎn)單的例子中實(shí)踐了各種繼承的方式。但繼承的實(shí)際用法可不會(huì)像本文這樣簡(jiǎn)單,今后介紹更多相關(guān)的知識(shí)。

到此這篇關(guān)于一文深入了解Python中的繼承知識(shí)點(diǎn)的文章就介紹到這了,更多相關(guān)Python 繼承內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • django js實(shí)現(xiàn)部分頁(yè)面刷新的示例代碼

    django js實(shí)現(xiàn)部分頁(yè)面刷新的示例代碼

    今天小編就為大家分享一篇django js實(shí)現(xiàn)部分頁(yè)面刷新的示例代碼,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-05-05
  • Python報(bào)錯(cuò):TypeError:?‘xxx‘?object?is?not?subscriptable解決辦法

    Python報(bào)錯(cuò):TypeError:?‘xxx‘?object?is?not?subscriptable解決

    這篇文章主要給大家介紹了關(guān)于Python報(bào)錯(cuò):TypeError:?‘xxx‘?object?is?not?subscriptable的解決辦法,TypeError是Python中的一種錯(cuò)誤,表示操作或函數(shù)應(yīng)用于不合適類(lèi)型的對(duì)象時(shí)發(fā)生,文中將解決辦法介紹的非常詳細(xì),需要的朋友可以參考下
    2024-08-08
  • 基于Python實(shí)現(xiàn)視頻去重小工具

    基于Python實(shí)現(xiàn)視頻去重小工具

    這篇文章主要為大家詳細(xì)介紹了如何通過(guò)Python語(yǔ)言編寫(xiě)簡(jiǎn)單的視頻去重小工具,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起嘗試一下
    2023-03-03
  • python 自動(dòng)去除空行的實(shí)例

    python 自動(dòng)去除空行的實(shí)例

    今天小編就為大家分享一篇python 自動(dòng)去除空行的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-07-07
  • Python使用scrapy采集時(shí)偽裝成HTTP/1.1的方法

    Python使用scrapy采集時(shí)偽裝成HTTP/1.1的方法

    這篇文章主要介紹了Python使用scrapy采集時(shí)偽裝成HTTP/1.1的方法,實(shí)例分析了scrapy采集的使用技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2015-04-04
  • Python日志模塊logging用法

    Python日志模塊logging用法

    這篇文章介紹了Python日志模塊logging的用法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-06-06
  • Python 如何創(chuàng)建一個(gè)簡(jiǎn)單的REST接口

    Python 如何創(chuàng)建一個(gè)簡(jiǎn)單的REST接口

    這篇文章主要介紹了Python 如何創(chuàng)建一個(gè)簡(jiǎn)單的REST接口,文中講解非常細(xì)致,代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-07-07
  • Python轉(zhuǎn)json時(shí)出現(xiàn)中文亂碼的問(wèn)題及解決

    Python轉(zhuǎn)json時(shí)出現(xiàn)中文亂碼的問(wèn)題及解決

    這篇文章主要介紹了Python轉(zhuǎn)json時(shí)出現(xiàn)中文亂碼的問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • 解讀Python中字典的key都可以是什么

    解讀Python中字典的key都可以是什么

    這篇文章主要介紹了解讀Python中字典的key都可以是什么,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-09-09
  • python中的zip模塊

    python中的zip模塊

    這篇文章主要介紹了zip文件格式是通用的文檔壓縮標(biāo)準(zhǔn),在ziplib模塊中,使用ZipFile類(lèi)來(lái)操作zip文件,感興趣的朋友參考如下
    2021-08-08

最新評(píng)論