婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > Python中的super()面向?qū)ο缶幊?/div>

Python中的super()面向?qū)ο缶幊?/h1>

熱門標(biāo)簽:企業(yè)微信地圖標(biāo)注 怎么辦理400客服電話 B52系統(tǒng)電梯外呼顯示E7 銀川電話機器人電話 沈陽防封電銷電話卡 鶴壁手機自動外呼系統(tǒng)違法嗎 高德地圖標(biāo)注收入咋樣 地圖標(biāo)注多個 萊蕪電信外呼系統(tǒng)

Python super()面向?qū)ο缶幊?br />

一、為什么要用 super()

當(dāng)子類重寫了父類方法時,又想調(diào)用父類的同名方法時,就需要用到 super()

二、什么是 super

  • 在 Python 中,super 是一個特殊的類
  • super() 就是使用 super 類創(chuàng)建出來的對象
  • 實際應(yīng)用的場景:子類在重寫父類方法時,調(diào)用父類方法

三、繼承中使用 super

1、實例方法使用 super

類圖

實際代碼

class A:
    def __init__(self):
        self.n = 1

    def add(self, m):
        print(f'AAA [self] is {id(self)}')
        print(f'AAA [self.n] is {self.n}')
        self.n += m


class B(A):
    def __init__(self):
        self.n = 100

    # 重寫父類方法
    def add(self, m):
        # 子類特有代碼
        print(f'BBB [self] is {id(self)}')
        print(f'BBB [self.n] is {self.n}')

        # 調(diào)用父類方法
        super().add(m)

        self.n += m


b = B()
b.add(2)
print(b.n)

 

# 輸出結(jié)果
BBB [self] is 4489158560
BBB [self.n] is 100

AAA [self] is 4489158560
AAA [self.n] is 100

104

super().add()  的確調(diào)用了父類方法
重點:此時父類方法的 self 并不是父類實例對象,而是子類實例對象

2、構(gòu)造方法使用 super

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

    def prints(self):
        print("Animale name is ", self.name)


class Dog(Animal):
    def __init__(self, name, age):
        # 調(diào)用父類的 init 構(gòu)造方法
        super(Dog, self).__init__(name)
        self.age = age

    def prints(self):
        # 調(diào)用父類的方法
        super(Dog, self).prints()
        print("Dog age is ", self.age)


dog = Dog("小汪", 10)
dog.prints()

 

# 輸出結(jié)果
Animale name is  小汪
Dog age is  10

這里用了 super(子類名, self) ,和上面的 super() 是一樣效果

調(diào)用父類方法有兩種方式

  • super().父類方法() 
  • super(子類名, self).父類方法() 

其實還有第三種

在 Python  2.x 的時候,如果需要調(diào)用父類的方法,還可以用

父類名.方法(self)

  • 這種方式,Python 3.x 還是支持的
  • 過不不推薦,因為父類名發(fā)生變化的話,方法調(diào)用位置的類名也要同步修改

通過父類名調(diào)用父類方法(不推薦)

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

    def prints(self):
        print("Animale name is ", self.name)


class Dog(Animal):
    def __init__(self, name, age):
        # 調(diào)用父類的 init 構(gòu)造方法
        Animal.__init__(self, name)
        self.age = age

    def prints(self):
        # 調(diào)用父類的方法
        Animal.prints(self)
        print("Dog age is ", self.age)


dog = Dog("小汪", 10)
dog.prints()


# 輸出結(jié)果
Animale name is  小汪
Dog age is  10

通過父類名調(diào)用的這種方式,是需要傳 self 參數(shù)的哦

溫馨提示:
在開發(fā)時, 父類名.方法() , super().方法() 兩種方式不要混用哈

靈魂拷問一:既然已經(jīng)重寫了子類的構(gòu)造方法,為什么還要去調(diào)用 super?
子類需要重寫父類方法來實現(xiàn)子類獨有的功能,但同時又需要依賴父類方法來完成某些邏輯

實際栗子

  • 在實現(xiàn)多線程的時候(后面會詳細(xì)展開說多線程)
  • 父類 Thread 的構(gòu)造方法包含了很多邏輯代碼
  • 子線程雖然需要實現(xiàn)子類獨有功能,但仍需父類方法來處理其他邏輯

from threading import Thread


class MyThread(Thread):
    def __init__(self, name):
        # 1、實現(xiàn)子類獨有功能
        print("子類線程 %s" % name)
        # 2、需要依賴父類方法完成其他功能
        super().__init__(name=name)

四、多繼承中使用 super

類圖

實際代碼

# 多繼承
class Animal:
    def __init__(self, animalName):
        print(animalName, 'is an animal.')


# Mammal 繼承 Animal
class Mammal(Animal):
    def __init__(self, mammalName):
        print(mammalName, 'is a mammal.')
        super().__init__(mammalName)


# CannotFly 繼承 Mammal
class CannotFly(Mammal):
    def __init__(self, mammalThatCantFly):
        print(mammalThatCantFly, "cannot fly.")
        super().__init__(mammalThatCantFly)


# CannotSwim 繼承 Mammal
class CannotSwim(Mammal):
    def __init__(self, mammalThatCantSwim):
        print(mammalThatCantSwim, "cannot swim.")
        super().__init__(mammalThatCantSwim)


# Cat 繼承 CannotSwim 和 CannotFly
class Cat(CannotSwim, CannotFly):
    def __init__(self):
        print('I am a cat.');
        super().__init__('Cat')


# Driver code
cat = Cat()
print('')
bat = CannotSwim('Bat')

 

# 輸出結(jié)果
I am a cat.
Cat cannot swim.
Cat cannot fly.
Cat is a mammal.
Cat is an animal.

Bat cannot swim.
Bat is a mammal.
Bat is an animal.

好像挺奇怪的,從輸出結(jié)果看,為什么 CannotSwim 類里面的 super().__init__() 調(diào)用的是 CannotFly 類里面的方法呢?不是應(yīng)該調(diào)用 CannotSwim 的父類 Mamal 的方法嗎?

靈魂拷問二:super 的執(zhí)行順序到底是什么?

  • 其實 super() 并不一定調(diào)用父類的方法
  • super() 是根據(jù)類的 MRO 方法搜索順序來決定調(diào)用誰的
  • super() 真正調(diào)用的是 MRO 中的下一個類,而不一定是父類
  • 當(dāng)然,這種情況只會出現(xiàn)在多繼承

先來看看 Cat 的 MRO

print(Cat.__mro__)

(class '__main__.Cat'>, class '__main__.CannotSwim'>, class '__main__.CannotFly'>, class '__main__.Mammal'>, class '__main__.Animal'>, class 'object'>)

從 Cat 的 MRO 可以看到

  • CannotSwim 后面跟的是 CannotFly 而不是 Mamal
  • 所以 CannotSwim 類里面的 super() 會調(diào)用 CannotFly 里面的方法

多繼承的栗子二

實際代碼

class A:
    def __init__(self):
        self.n = 2

    def add(self, m):
        # 第四步
        # 來自 D.add 中的 super
        # self == d, self.n == d.n == 5
        print('self is {0} @AAA.add'.format(self))
        self.n += m
        # d.n == 7


class C(A):
    def __init__(self):
        self.n = 4

    def add(self, m):
        # 第三步
        # 來自 B.add 中的 super
        # self == d, self.n == d.n == 5
        print('self is {0} @CCC.add'.format(self))
        # 等價于 suepr(C, self).add(m)
        # self 的 MRO 是 [D, B, C, A, object]
        # 從 C 之后的 [A, object] 中查找 add 方法
        super().add(m)

        # 第五步
        # d.n = 7
        self.n += 4
        # d.n = 11


class B(A):
    def __init__(self):
        self.n = 3

    def add(self, m):
        # 第二步
        # 來自 D.add 中的 super
        # self == d, self.n == d.n == 5
        print('self is {0} @BBB.add'.format(self))
        # self 的 MRO 是 [D, B, C, A, object]
        # 從 B 之后的 [C, A, object] 中查找 add 方法
        # 從 C 找 add 方法
        super().add(m)

        # 第六步
        # d.n = 11
        self.n += 3
        # d.n = 14


class D(B, C):
    def __init__(self):
        self.n = 5

    def add(self, m):
        # 第一步
        print('self is {0} @DDD.add'.format(self))
        # self 的 MRO 是 [D, B, C, A, object]
        # 從 D 之后的 [B, C, A, object] 中查找 add 方法
        # 從 B 找 add 方法
        super().add(m)

        # 第七步
        # d.n = 14
        self.n += 5
        # self.n = 19


d = D()
d.add(2)
print(d.n)
 

先看看 D 類的 MRO

print(D.__mro__)

(class '__main__.D'>, class '__main__.B'>, class '__main__.C'>, class '__main__.A'>, class 'object'>)

輸出結(jié)果

self is __main__.D object at 0x10c14a190> @DDD.add
self is __main__.D object at 0x10c14a190> @BBB.add
self is __main__.D object at 0x10c14a190> @CCC.add
self is __main__.D object at 0x10c14a190> @AAA.add
19

調(diào)用順序的確是 D、B、C、A

執(zhí)行順序

class D(B, C):          class B(A):            class C(A):             class A:
def add(self, m):       def add(self, m):      def add(self, m):       def add(self, m):
super().add(m)  1.--->  super().add(m) 2.--->  super().add(m)  3.--->  self.n += m
 self.n += 5   ------6. self.n += 3    ----5. self.n += 4     ----4. --|
(14+5=19)               (11+3=14)              (7+4=11)                (5+2=7)
 

執(zhí)行順序圖


到此這篇關(guān)于Python super()面向?qū)ο缶幊痰奈恼戮徒榻B到這了,更多相關(guān)Python super()內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • python中super()函數(shù)的理解與基本使用
  • 詳解python的super()的作用和原理
  • Python類的繼承super相關(guān)原理解析
  • python super()函數(shù)的基本使用
  • Python類super()及私有屬性原理解析
  • Python super()函數(shù)使用及多重繼承
  • Python super()方法原理詳解
  • python super函數(shù)使用方法詳解
  • python super用法及原理詳解
  • python類中super() 的使用解析
  • 使用 Supervisor 監(jiān)控 Python3 進(jìn)程方式
  • Python高級編程之繼承問題詳解(super與mro)
  • Python 繼承,重寫,super()調(diào)用父類方法操作示例
  • python3中類的繼承以及self和super的區(qū)別詳解

標(biāo)簽:烏魯木齊 呼倫貝爾 葫蘆島 安慶 呼倫貝爾 湘西 銀川 三亞

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Python中的super()面向?qū)ο缶幊獭罚疚年P(guān)鍵詞  Python,中的,super,面向,對象,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《Python中的super()面向?qū)ο缶幊獭废嚓P(guān)的同類信息!
  • 本頁收集關(guān)于Python中的super()面向?qū)ο缶幊痰南嚓P(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    91精品中文字幕一区二区三区| 欧美剧情电影在线观看完整版免费励志电影| 91亚洲午夜精品久久久久久| 欧美色区777第一页| 精品粉嫩aⅴ一区二区三区四区| 欧美大片一区二区三区| 国产精品白丝在线| 亚洲一区二三区| 在线不卡中文字幕播放| 不卡一区二区三区四区| 日韩黄色小视频| 欧美色综合影院| 欧美色窝79yyyycom| 亚洲一区二区三区在线播放| 亚洲人成精品久久久久| 奇米色777欧美一区二区| 亚洲精品视频在线| 在线视频欧美精品| 欧美日韩精品一区二区三区| 日韩专区中文字幕一区二区| 91丝袜呻吟高潮美腿白嫩在线观看| 精品伊人久久久久7777人| 久久欧美一区二区| 麻豆freexxxx性91精品| 偷拍日韩校园综合在线| 国产欧美一区二区在线观看| 国产综合久久久久久鬼色| 欧美欧美欧美欧美首页| 精品日产卡一卡二卡麻豆| 亚洲狠狠爱一区二区三区| 亚洲自拍与偷拍| 日韩精品一区二区三区中文精品| 在线这里只有精品| 五月婷婷久久综合| 欧美男男青年gay1069videost| 老司机午夜精品| 99久久婷婷国产综合精品 | 日韩av中文字幕一区二区| 久久精品99久久久| 日本久久一区二区| 视频一区二区中文字幕| 成人涩涩免费视频| 在线不卡一区二区| 国产呦萝稀缺另类资源| 玖玖九九国产精品| 日产国产欧美视频一区精品 | 成人爱爱电影网址| 亚洲精品在线观| 亚洲18女电影在线观看| 99九九99九九九视频精品| 亚洲欧洲av在线| 精品国产一区二区三区忘忧草 | 欧美日韩色综合| 国产自产视频一区二区三区| 日本午夜一区二区| 99国产精品久久久久久久久久久| 欧美日韩一卡二卡三卡| 在线播放日韩导航| 成人永久看片免费视频天堂| 国产电影一区在线| 欧美性受xxxx| 国产福利91精品| 欧美精品一区二区三区在线| 国产精品国产三级国产普通话蜜臀| 亚洲三级在线观看| 激情六月婷婷综合| 国产欧美一区二区三区鸳鸯浴| 午夜伦理一区二区| 一区二区三区资源| 韩国成人福利片在线播放| 亚洲女与黑人做爰| 在线观看视频91| 欧美一区三区二区| 91日韩精品一区| 色吧成人激情小说| 欧美色窝79yyyycom| 午夜视频一区二区三区| 99久久婷婷国产综合精品电影| 亚洲最新视频在线播放| 国产精品中文字幕日韩精品| 亚洲一区二区欧美日韩| 日韩黄色在线观看| 99re6这里只有精品视频在线观看 99re8在线精品视频免费播放 | 欧美精品久久久久久久多人混战| 一区二区三区精品| 国产日韩欧美在线一区| 亚洲午夜精品在线| 欧美日韩国产影片| 精品国产免费视频| 国产一区不卡精品| 国产高清成人在线| 久久伊99综合婷婷久久伊| www.亚洲国产| 免费成人性网站| 日韩久久精品一区| 成人深夜福利app| 精品毛片乱码1区2区3区| 久久精品噜噜噜成人88aⅴ| 91精品国产91久久综合桃花 | 国产日韩欧美综合一区| 国产精品一区二区黑丝| 久久蜜桃一区二区| 亚洲美女在线国产| 亚洲最大的成人av| 欧美性做爰猛烈叫床潮| 国产精品视频看| 国产视频一区在线播放| 色菇凉天天综合网| 亚洲一区影音先锋| 成人sese在线| 香蕉久久夜色精品国产使用方法| 欧美一区在线视频| 欧美久久久久久蜜桃| 亚洲激情av在线| 日韩一区中文字幕| 日本韩国视频一区二区| 国产精品一卡二卡在线观看| 亚洲人成在线播放网站岛国| 91精品国产综合久久香蕉麻豆| 欧美日本精品一区二区三区| 久久只精品国产| 国产呦精品一区二区三区网站| 日韩一区日韩二区| 亚洲女与黑人做爰| 日韩视频中午一区| 国产欧美一二三区| 精品电影一区二区| 日韩福利视频网| 久久不见久久见免费视频1| 青青国产91久久久久久| 国产亚洲欧美中文| 成人午夜精品在线| 亚洲成a人v欧美综合天堂下载| 欧美一区二区三区白人| 26uuu色噜噜精品一区| 日韩亚洲国产中文字幕欧美| 一本大道久久a久久精品综合| 久久久久久久久岛国免费| 伊人色综合久久天天人手人婷| 成人a级免费电影| 亚洲精品一区二区三区蜜桃下载 | 日本午夜一本久久久综合| 成人黄色在线视频| 日韩一区二区视频| 91激情在线视频| 国产精品免费视频一区| 亚洲国产裸拍裸体视频在线观看乱了| 国产精品国产馆在线真实露脸 | 日韩美女天天操| 自拍偷拍亚洲欧美日韩| 国产一区二区h| 亚洲精品成a人| 日韩亚洲国产中文字幕欧美| 免费一级欧美片在线观看| 三级久久三级久久| 亚洲综合视频网| 亚洲欧美日韩国产中文在线| 国产精品不卡在线观看| 正在播放一区二区| 成人激情视频网站| 国产综合色精品一区二区三区| 亚洲欧美区自拍先锋| 国产亚洲精品aa午夜观看| 国产欧美视频一区二区三区| 欧美精品一区二区三区在线播放| 99视频一区二区三区| 综合激情网...| 丝袜美腿亚洲色图| 久久综合一区二区| 久久美女艺术照精彩视频福利播放| 亚洲一区在线播放| 久久精品国产一区二区三区免费看| 精品久久久影院| a亚洲天堂av| 韩日欧美一区二区三区| 日本一区二区三区在线观看| 日本大胆欧美人术艺术动态| 欧美一区二区三区四区在线观看 | 亚洲第一成年网| 精品国产成人在线影院 | 制服.丝袜.亚洲.另类.中文| 99久久夜色精品国产网站| 国产精品1区2区3区在线观看| 亚洲情趣在线观看| 亚洲成年人网站在线观看| 国产91精品一区二区麻豆网站 | 国产精品动漫网站| 欧美精品久久天天躁| 国产盗摄一区二区| 欧美精品一区二区三区在线 | 日韩欧美激情在线| 五月婷婷另类国产| 一区二区中文字幕在线| 亚洲va韩国va欧美va| 日本欧美加勒比视频| 日韩欧美的一区二区| 91日韩在线专区| 精品福利在线导航| 麻豆精品久久久| 欧美日韩免费观看一区二区三区 |