多態
多態與多態性
多態指的是同一種事物的多種狀態:水這種事物有多種不同的狀態:冰,水蒸氣
多態性的概念指出了對象如何通過他們共同的屬性和動作來操作及訪問,而不需考慮他們具體的類。
冰,水蒸氣,都繼承於水,它們都有一個同名的方法就是變成雲,但是冰.變雲(),與水蒸氣.變雲()是截然不同的過程,雖然調用的方法都一樣
就列如動物有多種形態:貓,狗,豬
import abc class Animal(metaclass=abc.ABCMeta): #同一類事物:動物 @abc.abstractmethod def talk(self): pass class cat(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')
文件有多種形態:文本文件,可執行文件
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')
多態性
一 什么是多態動態綁定(在繼承的背景下使用時,有時也稱為多態性)
多態性是指在不考慮實例類型的情況下使用實例
在面向對象方法中一般是這樣表述多態性:
向不同的對象發送同一條消息(obj.func():是調用了obj的方法func,又稱為向obj發送了一條消息func),不同的對象在接收時會產生不同的行為(即方法)。
也就是說,每個對象可以用自己的方式去響應共同的消息。所謂消息,就是調用函數,不同的行為就是指不同的實現,即執行不同的函數。
比如:老師.下課鈴響了(),學生.下課鈴響了(),老師執行的是下班操作,學生執行的是放學操作,雖然二者消息一樣,但是執行的效果不同
多態性
Cat=cat() dog=Dog() pig=Pig() #Cat、dog、pig都是動物,只要是動物肯定有talk方法 #於是我們可以不用考慮它們三者的具體是什么類型,而直接使用 Cat.talk() dog.talk() pig.talk() #更進一步,我們可以定義一個統一的接口來使用 def func(obj): obj.talk()