多態指的是一類事物有多種形態,一個類有不少個子類,於是多態的概念是基於繼承的python
# 動物有多種形態:人類、豬、狗 class Animal: def run(self): # 子類約定俗稱的必須實現這個方法 raise AttributeError('子類必須實現這個方法') class People(Animal): def run(self): print('人正在走') class Pig(Animal): def run(self): print('pig is walking') class Dog(Animal): def run(self): print('dog is running') peo1 = People() pig1 = Pig() d1 = Dog() peo1.run() pig1.run() d1.run()
人正在走
pig is walking
dog is running函數
import abc class Animal(metaclass=abc.ABCMeta): # 同一類事物:動物 @abc.abstractmethod # 上述代碼子類是約定俗稱的實現這個方法,加上@abc.abstractmethod裝飾器後嚴格控制子類必須實現這個方法 def talk(self): raise AttributeError('子類必須實現這個方法') 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') peo2 = People() pig2 = Pig() d2 = Dog() peo2.talk() pig2.talk() d2.talk()
say hello
say aoao
say wangwangcode
# 文件有多種形態:文件、文本文件、可執行文件 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') text = Text() exe_file = ExeFile() text.click() exe_file.click()
open file
execute file對象
# 多態性:一種調用方式,不一樣的執行效果(多態性) def func(obj): obj.run() func(peo1) func(pig1) func(d1)
人正在走
pig is walking
dog is running繼承
# 多態性依賴於:繼承 # 多態性:定義統一的接口 def func(obj): # obj這個參數沒有類型限制,能夠傳入不一樣類型的值 obj.talk() # 調用的邏輯都同樣,執行的結果卻不同 func(peo2) func(pig2) func(d2)
say hello
say aoao
say wangwang接口
def func(obj): obj.click() func(text) func(exe_file)
open file
execute file字符串
def func(obj): print(len(obj)) func('hello') func([1, 2, 3]) func((1, 2, 3))
5class
3import
3cli
綜上能夠說,多態性是一個接口(函數func)的多種實現(如obj.run(),obj.talk(),obj.click(),len(obj))
其實你們從上面多態性的例子能夠看出,咱們並無增長新的知識,也就是說Python自己就是支持多態性的,這麼作的好處是什麼呢?
class Cat(Animal): # 屬於動物的另一種形態:貓 def talk(self): print('say miao') def func(animal): # 對於使用者來講,本身的代碼根本無需改動 animal.talk() cat1 = Cat() # 實例出一隻貓 func(cat1) # 甚至連調用方式也無需改變,就能調用貓的talk功能
say miao
多態:同一種事物的多種形態,動物分爲人類,豬類(在定義角度) 多態性:一種調用方式,不一樣的執行效果(多態性)