多型是指一類事物有多種形態
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.定義隱藏類實現的成員的新非虛...