類的多型與多型性

2021-10-13 16:08:31 字數 3747 閱讀 7922

多型是指一類事物有多種形態

class

animal

:def

speak

(self)

:print

(f"開口說話"

)#動物的形態之一:人

class

people

(animal)

:def

speak

(self)

:print

('呵呵呵'

)#動物的形態之二:狗

class

duck

(animal)

:def

speak

(self)

:print

('嘎嘎嘎'

)#動物的形態之三:豬

class

pig(animal)

:def

speak

(self)

:print

('咕咕咕'

)peo1 = people(

)duc1 = duck(

)pig1 = pig(

)peo1.speak(

)# 呵呵呵

duc1.speak(

)# 嘎嘎嘎

pig1.speak(

)# 咕咕咕

peo1, duc1, pig1物件都屬於乙個類

同一類的事物呼叫相同的方法, 但執行的效果卻不一樣, 這就是多型

class

file

:def

click

(self)

:pass

# 檔案的形態之一:文字檔案

class

text

(file)

:def

click

(self)

:print

('開啟檔案'

)# 檔案的形態之二:可執行檔案

class

exefile

(file)

:def

click

(self)

:print

('執行檔案'

)t1 = text(

)e1 = exefile(

)t1.click(

)# 開啟檔案

e1.click(

)# 執行檔案

t1, e1屬於同乙個類, 但是他們呼叫同乙個方法, 表現出來的效果卻不一樣

多型性指的是在不考慮物件的具體型別下, 直接使用物件的方法, 同一種呼叫方式, 執行的效果不一樣 (這就需要在設計時, 把物件的呼叫方法設計成形式統一的一種)

物件導向方法中一般是這樣表述多型性:向不同的物件傳送同一條訊息,不同的物件在接收時會產生不同的行為(即方法)。也就是說,每個物件可以用自己的方式去響應共同的訊息。所謂訊息,就是呼叫函式,不同的行為就是指不同的實現,即執行不同的函式

class

animal

:def

speak

(self)

:print

(f"開口說話"

)# 動物的形態之一:人

class

people

(animal)

:def

speak

(self)

:print

('呵呵呵'

)# 動物的形態之二:狗

class

duck

(animal)

:def

speak

(self)

:print

('嘎嘎嘎'

)# 動物的形態之三:豬

class

pig(animal)

:def

speak

(self)

:print

('咕咕咕'

)peo1 = people(

)duc1 = duck(

)pig1 = pig()==

====

====

====

====

====

====

====

====

====

*****==

?我們不去考慮 "peo1, duc1, pig1" 這三個物件是什麼型別, 他們都有"speak"方法

#定義乙個統一的介面來使用

defanimal_speak

(obj)

: obj.speak()

animal_speak(peo1)

# 呵呵呵

animal_speak(duc1)

# 嘎嘎嘎

animal_speak(pig1)

# 咕咕咕

?新增乙個"狗"類

class

dog(animal)

:def

speak

(self)

:print

("汪汪汪"

)

dog1 = dog(

)?對於使用者來說**不需要改變

defanimal_speak

(obj)

: obj.speak(

)?還是使用相同的呼叫方式

animal_speak(dog1)

# 汪汪汪

# 這樣我們就新增了乙個"dog"形態, 產生了乙個"dog1"例項, 使用者可以在完全不需要修改自己**的情況下,使用之前一樣的呼叫方式來呼叫"dog1"的"speak"方法

多型的前提是 : 同一類事物, 最好的方法就是讓他們繼承同乙個基類

為了保證多型, 我們可以使用abc 模組來強制的要求子類必須重寫父類的某些功能, 如果不重寫, 則會報錯

import abc

class

animal

(metaclass=abc.abcmeta)

: @abc.abstractmethod # @abc.abstractmethod裝飾器後嚴格控制子類必須實現這個方法, 才能正常的例項化

defspeak

(self)

:print

(f"開口說話"

)class

people

(animal)

:# 子類繼承了"animal"類就必須重寫指定的"speak"

defspeak

(self)

:print

('呵呵呵'

)class

duck

(animal)

:pass

# def speak(self): # "duck"沒有重寫

# print('嘎嘎嘎')

peo1 = people(

)duc1 = duck(

)# 例項物件時就報錯 "typeerror"

多型與多型性

1.什麼是多型 多型指的是同一種 類事物的不同形態 2.為何要用多型性 1 增加了程式的靈活性 2 增加了程式的可擴張性 多型性 分為靜態多型性和動態多型性 多型性 在多型的背景下,可以在不用考慮物件具體型別的前提下而直接使用物件 多型性的精髓 統一 3.如何用多型 class animal def...

python 類的多型與多型性

多型 多型指的是一類事物有多種形態 如 動物有多種形態 人 狗 豬。多型性 指在不考慮例項型別的情況下使用例項,多型性分為靜態多型性和動態多型性。靜態多型性 任何型別都可以用運算子 進行運算。eg 字串 字串 數字 數字 列表 列表。我們在使用 號時也沒有考慮型別 動態多型性如下 動態多型性 imp...

類的多型性

類的多型 多型就是指在程式執行時,執行的雖然是乙個呼叫方法的語句,卻可以根據派生類物件的型別的不同完成方法不同的具體實現 當派生類從基類繼承時,它會獲得積累的所有方法,字段,屬性,和事件.派生類可以選擇 1.繼承最接近的基類方法而不是重寫它 2.重寫基類中的虛擬成員.3.定義隱藏類實現的成員的新非虛...