小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

[每日一題]7、Python中的super()函數(shù)

 Four兄 2019-08-25

第一時(shí)間收到精彩推送!

Python Every Day, 第 7 天


我們知道Python是一門面向?qū)ο蟮木幊陶Z(yǔ)言,既然面向?qū)ο缶蜕俨涣死^承。

繼承:表示子類可以使用其父類中方法。

在Python中,可以通過(guò)super() 函數(shù)來(lái)調(diào)用父類的方法。

如下所示,我定義了一個(gè) Person 類,有 說(shuō)、唱、rap、籃球 這四個(gè) 方法。

class Person():
    def speak(self):
        print('i can speak')

    def sing(self):
        print('i can sing')

    def rap(self):
        print('i can rap')

    def basketball(self):
        print('i can basketball')

如果只有一個(gè)類 直接實(shí)例化.函數(shù)名的方式進(jìn)行調(diào)用即可。

假設(shè)我現(xiàn)在有個(gè)Student (學(xué)生類),同樣也可以說(shuō)、唱、Rap、籃球。如果再重新寫一遍這四個(gè)函數(shù)就比較麻煩。因此這個(gè)時(shí)候就可以用到繼承。學(xué)生類來(lái)繼承Person類(也就是說(shuō)Student是Person的子類,Person是Student的父類)

如下所示

# Student(Object) 括號(hào)中的類,表示要繼承的類
class Student(Person):
    pass

# Student1(Object) 括號(hào)中的類,表示要繼承的類
class Student1(Person):
    def study(self):
        print('i like study')

if __name__ == '__main__':
    # 實(shí)例化一個(gè)Student對(duì)象
    s = Student()
    s.rap()  #  i can rap
    s.basketball() # i can basketball

    s1 = Student1()
    s1.rap()  # i can rap
    s1.study() # i like study

Student、Student1 都繼承了Person類。

Student只會(huì) 說(shuō)、唱、rap、籃球。而Student1 還喜歡學(xué)習(xí)??梢栽俣x一個(gè)study函數(shù)。

上面只是用簡(jiǎn)單的代碼介紹了一下Python中的繼承。還沒(méi)有說(shuō)到如何用super()來(lái)調(diào)用父類的方法。

在子類中如果需要去掉用父類的方法時(shí),可以通過(guò) super(). 父類方法 的形式完成。

示例:

class A:
    def get_name(self):
        return 'my name is xiaoming'


class B(A):
    def my_info(self):
        print('i am 18 years old')
        # 通過(guò)super() 函數(shù) 調(diào)用父類A 中的get_name函數(shù),返回字符串
        print(super().get_name())
        print('i like rap and basketball')


if __name__ == '__main__':
    b = B()
    '''
    輸出:
    i am 18 years old
    my name is xiaoming
    i like rap and basketball
    '''

    b.my_info()

在B方法中調(diào)用my_info 時(shí),可以直接通過(guò)父類A中的get_name 方法 獲取到名字。

問(wèn)題: 如果一個(gè)子類繼承了兩個(gè)父類,并且父類中的方法名相同。那究竟會(huì)調(diào)用哪個(gè)類呢?

這個(gè)問(wèn)題可以通過(guò)類的內(nèi)置屬性 __mro__ 去查看調(diào)用順序。這個(gè)方法主要是在多繼承時(shí)判斷方法、屬性的調(diào)用路徑。

class A:
    num = 1
    def method(self):
        print('A ..method')

class B:
    num = 2
    def method(self):
        print('B .. method')


class C(A, B):
    num = 3
    pass

if __name__ == '__main__':
    c = C()
    print(C.__mro__)  # (<class '__main__.C'>, <class '__main__.A'>, <class '__main__.B'>, <class 'object'>)
    print(c.num)  #  3
    c.method()  # A ..method

如上,C.__mro__ 打印結(jié)果可以執(zhí)行順序?yàn)?C -> A - >B

因此print(c.num)。因?yàn)閏中有num屬性,所以會(huì)打印3.

執(zhí)行c.method時(shí) 。因?yàn)閏中沒(méi)有method屬性,會(huì)去A中查找,則輸出 A..method。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多