開發與維運

方法的重寫override | Python從入門到精通:高階篇之三十

繼承簡介 | Python從入門到精通:高階篇之二十九

方法的重寫

定義一個類 Animal(動物)
這個類中需要兩個方法:run() sleep()
定義一個Dog類,繼承Animal

class Animal:
    def run(self):
        print('動物會跑~~~')

    def sleep(self):
        print('動物睡覺~~~')


class Dog(Animal):
    def bark(self):
        print('汪汪汪~~~') 

    def run(self):
        print('狗跑~~~~')    

創建一個Dog類的實例

d = Dog()

d.run()

執行結果:

image.png

通過結果,可以發現調用的是Dog中的方法。
如果在子類中如果有和父類同名的方法,則通過子類實例去調用方法時,會調用子類的方法而不是父類的方法,這個特點我們成為叫做方法的重寫(覆蓋,override)。
可以確保在繼承父類方法之後,自身還可以做出簡單的修改。

創建一個類:

class A(object):
    def test(self):
        print('AAA')

class B(A):
    pass

class C(B):
    pass   

# 創建一個c的實例
c = C()
c.test()

執行結果:

image.png

我們對以上代碼做出一點改變:

class A(object):
    def test(self):
        print('AAA')

class B(A):
    pass

class C(B):
    def test(self):
        print('CCC')   

# 創建一個c的實例
c = C()
c.test()

執行結果:

image.png

class A(object):
    def test(self):
        print('AAA')

class B(A):
    def test(self):
        print('BBB')

class C(B):
    def test(self):
        print('CCC')   

# 創建一個c的實例
c = C()
c.test()

執行結果:

image.png

當我們調用一個對象的方法時,會優先去當前對象中尋找是否具有該方法,如果有則直接調用。如果沒有,則去當前對象的父類中尋找,如果父類中有則直接調用父類中的方法,如果沒有,則去父類的父類中尋找,以此類推,直到找到object,如果依然沒有找到,則報錯。
我們來做個修改:

c.hello()

執行結果:

image.png

配套視頻課程,點擊這裡查看

獲取更多資源請訂閱Python學習站

Leave a Reply

Your email address will not be published. Required fields are marked *