位置:首頁 » Python3入門教學 » Python3 多態

Python3 多態 [編輯]

有時候,一個對象有多種類型或形式。假設有一個按鈕,有許多不同的拉伸輸出(圓形按鈕,複選按鈕,方形按鈕,按鈕圖像),但它們確實共享相同的操作邏輯“點擊”:onClick()。訪問使用相同的方法。這種思想稱為:多態。

多態是基於希臘詞Poly (多)和態(形式)。我們將創建一個可以采用或使用許多形式的對象的結構。

多態性函數在Python中使用:

我們創建兩個類:熊(Bear)和狗(Dog),它們各自有一個獨特的聲音。然後,我們創建兩個實例,並用同樣的方法調用它們看看它們各自的作用。

class Bear(object):
    def sound(self):
        print "Groarrr"
 
class Dog(object):
    def sound(self):
        print "Woof woof!"
 
def makeSound(animalType):
    animalType.sound()
 
 
bearObj = Bear()
dogObj = Dog()
 
makeSound(bearObj)
makeSound(dogObj)

結果輸出:

Groarrr
Woof woof!

多態性與抽象類(最常用)

如果創建了一個編輯器,你事先可能不知道什麼類型的文件,用戶打開(PDF格式或word格式?)。 它不會有很大的訪問,取代的是每個文檔有20個類型?
for document in documents:
    print document.name + ': ' + document.show()

要做到這一點,我們創建了一個抽象類:document。這個類冇有任何實現但定義結構(功能型),所有形式必須具備。如果我們定義函數 show(),那麼這兩個 PdfDocument 和 WordDocument 必須擁有 show()函數。全部代碼如下:

輸出結果:

Document1: Show pdf contents!
Document2: Show pdf contents!
Document3: Show word contents!

我們有一個抽象的接入點(文檔),以多種類型的對象(pdf,word)遵循相同的結構。

另一個例子是有一個抽象類:Car 保持該結構方法:drive() 和 stop()。  我們定義兩個對象:Sportscar 和 Truck,它們都是 Car 的一種形式。在偽代碼是需要做的是:

class Car:
    def drive abstract, no implementation.
    def stop abstract, no implementation.
 
class Sportscar(Car):
    def drive: implementation of sportscar
    def stop: implementation of sportscar
 
class Truck(Car):
    def drive: implementation of truck
    def stop: implementation of truck

然後我們就可以訪問任何類型的汽車,並調用其功能,而無需考慮形式是跑車(Sportscar )或卡車(Truck)。全部代碼:

結果輸出: