物件導向的多型 多型性

2022-08-25 13:45:23 字數 2266 閱讀 8046

多型指的是一類事物有多種形態,比如水有多種形態:冰、水、水蒸氣,但都是h2o,下面定義乙個h2o的父類和三種形態的子類:

class

h2o:

def__init__

(self,name,temperature):

self.name =name

self.temperature =temperature

defturn(self):

if self.temperature <=0:

print('

溫度太低,變成%s了

'%self.name)

elif self.temperature >0 and self.temperature <100:

print('

溫度適中,變成%s了

'%self.name)

else

:

print('

溫度太高變成%s了

'%self.name)

class

ice(h2o):

pass

class

water(h2o):

pass

class

air(h2o):

pass

多型性就是在不考慮例項型別的情況下使用例項,舉個例子,我們之前學過的乙個內建函式len(),可以用於字串,也可以用於列表和元組:

s=str('

cjeowjo')

l=list([1,2,3])

t=tuple((4,5,6))

#我們可以在不考慮三者型別的前提下使用s,l,t

s.__len__

()l.

__len__

()t.

__len__()#

其實我們都是這樣用的

len(s)

len(l)

len(t)

其實字串、列表和元組,是三個子類,他們有共同的父類type,例項化之後都可以呼叫父類的__len__()這個屬性,但是定義乙個len()函式後,使用就更靈活了。現在回到之前水的例子:

class

h2o:

def__init__

(self,name,temperature):

self.name =name

self.temperature =temperature

defturn(self):

if self.temperature <=0:

print('

溫度太低,變成%s了

'%self.name)

elif self.temperature >0 and self.temperature <100:

print('

溫度適中,變成%s了

'%self.name)

else

:

print('

溫度太高變成%s了

'%self.name)

class

ice(h2o):

pass

class

water(h2o):

pass

class

air(h2o):

pass

i1 = ice('

冰',-10)

w2 = water('

水',20)

a1 = air('

水蒸氣',120)

i1.turn()

w2.turn()

a1.turn()

>>>溫度太低,變成冰了

>>>溫度適中,變成水了

>>>溫度太高變成水蒸氣了

deffunc(obj):

obj.turn()

func(i1)

func(w2)

func(a1)

>>>溫度太低,變成冰了

>>>溫度適中,變成水了

>>>溫度太高變成水蒸氣了

結果是一樣的,這個時候再多一種水的其他類,也可以直接用func函式了(當然,目前水就這三種形態,只是假設),可見多型的好處在於:

1.增加了程式的靈活性

以不變應萬變,不論物件千變萬化,使用者都是同一種形式去呼叫,如func(obj)

2.增加了程式額可擴充套件性

通過繼承animal類建立了乙個新的類,使用者無需更改自己的**,還是用func(obj)去呼叫 

物件導向之多型 多型性

一 多型 多型指的是一類事物有多種形態 動物有多種形態 人,狗,豬 import abcclass animal metaclass abc.abcmeta 同一類事物 動物 abc.abstractmethod deftalk self pass class people animal 動物的形態...

物件導向之 多型與多型性

1.什麼是多型?多型指的是同一種事物的多種形態。水 冰,水蒸氣,液態水 2.為何要用多型?多型性 繼承同乙個類的多個子類中有相同的方法名 那麼子類產生的物件就可以不用考慮具體的型別而直接呼叫功能 3,如何用?例如 import abc class animal metaclass abc.abcme...

物件導向程式設計 多型性

include iostream using namespace std class b0 int main 輸出 b1 display d1 display 示例3 include using namespace std class b0 基類b0宣告 void main 主函式 輸出 b0 di...