1. 程式人生 > >Day 5-3 多態與多態性

Day 5-3 多態與多態性

直接 文件 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 多態與多態性