在學習python面向對象編程時,經常會遇到虛函數重載的問題。虛函數是一個在父類中被聲明的函數,但它可以在子類中被重新定義,從而實現多態性。在python中,虛函數可以通過抽象基類(Abstract Base Class)來實現。
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是一個抽象基類,它定義了一個虛函數speak(),但并沒有對其進行具體實現。而子類Dog和Cat則分別重載了這個虛函數,實現了自己的“說話”方式。在主程序中,我們創建了兩只動物(一只狗和一只貓),并通過循環調用它們的speak()函數來輸出它們各自的聲音。
需要注意的是,由于Animal類中的speak()函數是抽象的,所以我們無法直接實例化一個Animal對象。但是,我們可以通過創建它的子類來實現這一點,并重載它的虛函數。這樣,我們就可以在子類中自定義它的行為,從而實現多態性。