Day 5-3 多態與多態性
阿新 • • 發佈:2018-04-29
直接 文件 class metaclass say iam tex bcm method
多態與多態性
鴨子類型
多態與多態性
多態:一類事物有多種形態.比如,動物有多種形態,人,狗,豬,豹子.水也有多種形態,冰,雪,水蒸氣.
1 #多態:同一類事物的多種形態 2 import abc 3 class Animal(metaclass=abc.ABCMeta): #同一類事物:動物 4 @abc.abstractmethod 5 def talk(self): 6 pass 7 8 class People(Animal): #動物的形態之一:人 9 def talk(self): 10 print(‘say hello‘) 11 12 class Dog(Animal): #動物的形態之二:狗 13 def talk(self): 14 print(‘say wangwang‘) 15 16 class Pig(Animal): #動物的形態之三:豬 17 def talk(self): 18 print(‘say aoao‘) 19 20 class Cat(Animal): 21 def talk(self): 22 print(‘say miamiao‘) 23 24 #多態性:指的是可以在不考慮對象的類型的情況下而直接使用對象25 peo1=People() 26 dog1=Dog() 27 pig1=Pig() 28 cat1=Cat() 29 30 # peo1.talk() 31 # dog1.talk() 32 # pig1.talk() 33 34 def func(animal): 35 animal.talk()
func(peo1) # 不用考慮peo1到底是豬狗人,還是其他的類型,直接可以通過這個統一的func函數來調用執行.
多態性的好處:
1.增加了程序的靈活性
以不變應萬變,不論對象千變萬化,使用者都是同一種形式去調用,如func(animal)
2.增加了程序額可擴展性
通過繼承animal類創建了一個新的類,使用者無需更改自己的代碼,還是用func(animal)去調用
鴨子類型:
即,如果看起來像鴨子,走路像鴨子而且叫起來像鴨子,那麽就是鴨子.
1 #二者都像鴨子,二者看起來都像文件,因而就可以當文件一樣去用 2 class TxtFile: 3 def read(self): 4 print("text is reading") 5 6 def write(self): 7 pass 8 9 class DiskFile: 10 def read(self): 11 print("disk is reading") 12 def write(self): 13 pass 14 15 text = TxtFile() 16 disk = DiskFile() 17 18 text.read() 19 disk.read()
鴨子類型,不用繼承抽象類,只需要把2個類型裏的方法屬性寫的相像.就可以了.
Day 5-3 多態與多態性