免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費(fèi)電子書(shū)等14項(xiàng)超值服

開(kāi)通VIP
[每日一題]7、Python中的super()函數(shù)

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

Python Every Day, 第 7 天


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

繼承:表示子類(lèi)可以使用其父類(lèi)中方法。

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

如下所示,我定義了一個(gè) Person 類(lèi),有 說(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è)類(lèi) 直接實(shí)例化.函數(shù)名的方式進(jìn)行調(diào)用即可。

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

如下所示

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

# Student1(Object) 括號(hào)中的類(lèi),表示要繼承的類(lèi)
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類(lèi)。

Student只會(huì) 說(shuō)、唱、rap、籃球。而Student1 還喜歡學(xué)習(xí)。可以再定義一個(gè)study函數(shù)。

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

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

示例:

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)用父類(lèi)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ò)父類(lèi)A中的get_name 方法 獲取到名字。

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

這個(gè)問(wèn)題可以通過(guò)類(lèi)的內(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。

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶(hù)發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
python中class函數(shù)的super
巧用Python裝飾器 免去調(diào)用父類(lèi)構(gòu)造函數(shù)的麻煩
類(lèi)和實(shí)例
python多重繼承的鉆石問(wèn)題
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服