標籤:運算 obj 執行 方式 src 不同 ima 執行個體 動態綁定
一、多態
多態指的是一類事物有多種形態
動物有多種形態:人,狗,豬
import abcclass Animal(metaclass=abc.ABCMeta): #同一類事物:動物 @abc.abstractmethod def talk(self): passclass 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‘)
檔案有多種形態:文字檔,可執行檔
import abcclass File(metaclass=abc.ABCMeta): #同一類事物:檔案 @abc.abstractmethod def click(self): passclass Text(File): #檔案的形態之一:文字檔 def click(self): print(‘open file‘)class ExeFile(File): #檔案的形態之二:可執行檔 def click(self): print(‘execute file‘)
二、多態性
1.什麼事多態動態綁定(在繼承的背景下使用時,有時也成為多態性)
多態性是指在不考慮執行個體類型的情況下使用執行個體
在物件導向方法中一般是這樣表述多態性:向不同的對象發送同一條訊息(!!!obj.func():是調用了obj的方法func,又稱為向obj發送了一條訊息func),不同的對象在接收時會產生不同的行為(即方法)。也就是說,每個對象可以用自己的方式去響應共同的訊息。所謂訊息,就是調用函數,不同的行為就是指不同的實現,即執行不同的函數。比如:老師.下課鈴響了(),學生.下課鈴響了(),老師執行的是下班操作,學生執行的是放學操作,雖然二者訊息一樣,但是執行的效果不同
詳細解釋
多態性分為靜態多態性和動態多態性
靜態多態性:如任何類型都可以用運算子+進行運算
動態多態性:如下
peo=People()dog=Dog()pig=Pig()#peo、dog、pig都是動物,只要是動物肯定有talk方法#於是我們可以不用考慮它們三者的具體是什麼類型,而直接使用peo.talk()dog.talk()pig.talk()#更進一步,我們可以定義一個統一的介面來使用def func(obj): obj.talk()
2.為什麼要用
Python--物件導向之多態與多態性