多型與多型性
阿新 • • 發佈:2021-12-06
多型
多型指的是一類事物有很多種形態
比如:檔案有很多種形態
import abc class File(metaclass=abc.ABCMeta): #同一類事物:檔案 @abc.abstractmethod def click(self): pass class Text(File): #檔案的形態之一:文字檔案 def click(self): print('open file') class ExeFile(File): #檔案的形態之二:可執行檔案 def click(self): print('execute file')
多型性
1、概念
多型性是指在不考慮例項型別的情況下使用例項
2、分類
多型性分為靜態多型性和動態多型性
3、靜態多型性
如任何型別都可以用運算子+進行運算
4、動態多型性
import abc class Animal(metaclass=abc.ABCMeta): #同一類事物:動物 @abc.abstractmethod def talk(self): pass class People(Animal): #動物的形態之一:人 def talk(self):print('say hello') class Dog(Animal): #動物的形態之二:狗 def talk(self): print('say wangwang') class Pig(Animal): #動物的形態之三:豬 def talk(self): print('say aoao')
peo=People() dog=Dog() pig=Pig() #peo、dog、pig都是動物,只要是動物肯定有talk方法 #於是我們可以不用考慮它們三者的具體是什麼型別,而直接使用 peo.talk() dog.talk() pig.talk()#更進一步,我們可以定義一個統一的介面來使用 def func(obj): obj.talk()
5、多型性的好處
1、增加程式的靈活性
2、增加程式的可擴充套件性
6、多型練習
class Pig(): def speak(self): print('哼哼哼') class Dog(): def speak(self): print('汪汪汪') class Txt(): def speak(self): print('Txt') obj = People() obj1 = Pig() obj2 = Dog() obj3 = Txt() # 多型帶來的特性:在不用考慮物件資料型別的情況下,直接呼叫對應的函式 def animal(animal): return animal.speak() animal(obj) animal(obj1) animal(obj2) animal(obj3) # 父類限制子類的行為 class Animal(): def speak(self): raise Exception("必須實現speak方法")
7、其實大家一直在享受著多型性帶來的好處,比如Python的序列型別有多種形態:字串,列表,元組,多型性體現如下
#str,list,tuple都是序列型別 s=str('hello') 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)
抽象類
抽象類只能被繼承,不能被例項化
class Animal(metaclass=abc.ABCMeta): @abc.abstractmethod # 該方法已經是抽象方法了 def speak(self): pass @abc.abstractmethod def login(self):pass class People(Animal): def speak(self): # print('嗷嗷嗷') pass def login(self): pass class Pig(Animal): def speak(self): print('哼哼哼') class Dog(Animal): def speak(self): print('汪汪汪') obj = People() obj.speak()