在學(xué)習(xí)python面向?qū)ο缶幊虝r(shí),經(jīng)常會(huì)遇到虛函數(shù)重載的問(wèn)題。虛函數(shù)是一個(gè)在父類中被聲明的函數(shù),但它可以在子類中被重新定義,從而實(shí)現(xiàn)多態(tài)性。在python中,虛函數(shù)可以通過(guò)抽象基類(Abstract Base Class)來(lái)實(shí)現(xiàn)。
from abc import ABC, abstractmethod class Animal(ABC): @abstractmethod def speak(self): pass class Dog(Animal): def speak(self): return "Woof!" class Cat(Animal): def speak(self): return "Meow!" animals = [Dog(), Cat()] for animal in animals: print(animal.speak())
在上面的代碼中,Animal是一個(gè)抽象基類,它定義了一個(gè)虛函數(shù)speak(),但并沒(méi)有對(duì)其進(jìn)行具體實(shí)現(xiàn)。而子類Dog和Cat則分別重載了這個(gè)虛函數(shù),實(shí)現(xiàn)了自己的“說(shuō)話”方式。在主程序中,我們創(chuàng)建了兩只動(dòng)物(一只狗和一只貓),并通過(guò)循環(huán)調(diào)用它們的speak()函數(shù)來(lái)輸出它們各自的聲音。
需要注意的是,由于Animal類中的speak()函數(shù)是抽象的,所以我們無(wú)法直接實(shí)例化一個(gè)Animal對(duì)象。但是,我們可以通過(guò)創(chuàng)建它的子類來(lái)實(shí)現(xiàn)這一點(diǎn),并重載它的虛函數(shù)。這樣,我們就可以在子類中自定義它的行為,從而實(shí)現(xiàn)多態(tài)性。