python 多型應用 Python多型原理及實現

2021-10-11 19:34:53 字數 2134 閱讀 9557

對於弱型別的語言來說,變數並沒有宣告型別,因此同乙個變數完全可以在不同的時間引用不同的物件。當同乙個變數在呼叫同乙個方法時,完全可能呈現出多種行為(具體呈現出哪種行為由該變數所引用的物件來決定),這就是所謂的多型(polymorphism)。

先看下面程式:class bird:

def move(self, field):

print('鳥在%s上自由地飛翔' % field)

class dog:

def move(self, field):

print('狗在%s裡飛快的奔跑' % field)

# x變數被賦值為bird物件

x = bird()

# 呼叫x變數的move()方法

x.move('天空')

# x變數被賦值為dog物件

x = dog()

# 呼叫x變數的move()方法

x.move('草地')

上面程式中 x 變數開始被賦值為 bird 物件,因此當 x 變數執行 move() 方法時,它會表現出鳥類的飛翔行為。接下來 x 變數被賦值為 dog 物件,因此當 x 變數執行 move() 方法時,它會表現出狗的奔跑行為。

執行上面程式,可以看到如下執行結果:鳥在天空上自由地飛翔

狗在草地裡飛快的奔跑

從上面的執行結果可以看出,同乙個變數 x 在執行同乙個 move() 方法時,由於 x 指向的物件不同,因此它呈現出不同的行為特徵,這就是多型。

看到這裡,可能有讀者感到失望,這個多型有什麼用啊?不就是建立物件、呼叫方法嗎?看不出多型有什麼優勢啊?

實際上,多型是一種非常靈活的程式設計機制。假如我們要定義乙個 canvas(畫布)類,這個畫布類定義乙個 draw_pic() 方法,該方法負責繪製各種圖形。該 canvas類的**如下:class canvas:

def draw_pic(self, shape):

print('--開始繪圖--')

shape.draw(self)

從上面**可以看出,canvas 的 draw_pic() 方法需要傳入乙個 shape 引數,該方法就是呼叫 shape 引數的 draw() 方法將自己繪製到畫布上。

從上面程式來看,canvas 的 draw_pic() 傳入的引數物件只要帶乙個 draw() 方法就行,至於該方法具有何種行為(到底執行怎樣的繪製行為),這與 draw_pic() 方法是完全分離的,這就為程式設計增加了很大的靈活性。下面程式定義了三個圖形類,並為它們都提供了 draw() 方法,這樣它們就能以不同的行為繪製在畫布上,這就是多型的實際應用。看如下示例程式:class canvas:

def draw_pic(self, shape):

print('--開始繪圖--')

shape.draw(self)

class rectangle:

def draw(self, canvas):

print('在%s上繪製矩形' % canvas)

class ********:

def draw(self, canvas):

print('在%s上繪製三角形' % canvas)

class circle:

def draw(self, canvas):

print('在%s上繪製圓形' % canvas)

c = canvas()

# 傳入rectangle引數,繪製矩形

c.draw_pic(rectangle())

# 傳入********引數,繪製三角形

c.draw_pic(********())

# 傳入circle引數,繪製圓形

c.draw_pic(circle())

執行上面**, 可以看到如下輸出結果:--開始繪圖--

在<__main__.canvas>上繪製矩形

--開始繪圖--

在<__main__.canvas>上繪製三角形

--開始繪圖--

在<__main__.canvas>上繪製圓形

從上面這個例子可以體會到 python 多型的優勢。當程式涉及 canvas 類的 draw_pic() 方法時,該方法所需的引數是非常靈活的,程式為該方法傳入的引數物件只要具有指定方法就行,至於該方法呈現怎樣的行為特徵,則完全取決於物件本身,這大大提高了 draw_pic() 方法的靈活性。

java多型應用

物件導向的三大特徵 1.封裝 2.繼承。3.多型 多型 乙個物件具備多種形態。父類的引用型別變數指向了子類的物件 或者是介面 的引用型別變數指向了介面實現類的物件 多型的前提 必須存在繼承或者實現 關係。動物 a new 狗 多型要注意 的細節 1.多型情況下,子父類存在同名的成員變數時,訪問的是父...

多型應用例項

主機板,主機板可以插入網絡卡。直接描述主機板以及網絡卡,並在主機板中使用該網絡卡,這樣的設計雖然當然可以應用,但缺少擴充套件性。比如又來乙個音效卡該如何呢?難道要修改主機板不成?找這些事物的共性。主機板是為了擴充套件自己的功能,而是提高後期的可維護性。先對這些板卡的共性進行抽取。定義乙個規則,這個規...

多型的應用

一 多型的概念 物件導向語言有三大主要特徵 封裝 繼承 多型 封裝是為了把我們需要隱藏的東西私有化,不讓別人知道,把該暴露的暴露出去 繼承提高了 的復用性,我們可以直接拿父類中的屬性,而且子父類的產生使類與類之間產生了關係,就有了多型的出現。顧名思義,多型就是事物的多種體現形態,學生軍人農民都是人,...