物件導向之多型

2021-09-26 13:08:33 字數 2360 閱讀 4520

多型指的是一類事物有多種形態

動物有多種形態:人,狗,豬

import abc

class

animal

(metaclass=abc.abcmeta)

:#同一類事物:動物

@abc.abstractmethod

deftalk

(self)

:pass

class

people

(animal)

:#動物的形態之一:人

deftalk

(self)

:print

('say hello'

)class

dog(animal)

:#動物的形態之二:狗

deftalk

(self)

:print

('say wangwang'

)class

pig(animal)

:#動物的形態之三:豬

deftalk

(self)

:print

('say aoao'

)

import abc

class

file

(metaclass=abc.abcmeta)

:#同一類事物:檔案

@abc.abstractmethod

defclick

(self)

:pass

class

text

(file)

:#檔案的形態之一:文字檔案

defclick

(self)

:print

('open file'

)class

exefile

(file)

:#檔案的形態之二:可執行檔案

defclick

(self)

:print

('execute file'

)

一 什麼是多型動態繫結(在繼承的背景下使用時,有時也稱為多型性)

多型性是指在不考慮例項型別的情況下使用例項

在物件導向方法中一般是這樣表述多型性:

向不同的物件傳送同一條訊息(!!!obj.func():是呼叫了obj的方法func,又稱為向obj傳送了一條訊息func),不同的物件在接收時會產生不同的行為(即方法)。

也就是說,每個物件可以用自己的方式去響應共同的訊息。所謂訊息,就是呼叫函式,不同的行為就是指不同的實現,即執行不同的函式。

比如:老師.下課鈴響了(),學生.下課鈴響了(),老師執行的是下班操作,學生執行的是放學操作,雖然二者訊息一樣,但是執行的效果不同

多型性

peo=people(

)dog=dog(

)pig=pig(

)#peo、dog、pig都是動物,只要是動物肯定有talk方法

#於是我們可以不用考慮它們三者的具體是什麼型別,而直接使用

peo.talk(

)dog.talk(

)pig.talk(

)#更進一步,我們可以定義乙個統一的介面來使用

deffunc

(obj)

: obj.talk(

)

鴨子型別

逗比時刻:

python崇尚鴨子型別,即『如果看起來像、叫聲像而且走起路來像鴨子,那麼它就是鴨子』

python程式設計師通常根據這種行為來編寫程式。例如,如果想編寫現有物件的自定義版本,可以繼承該物件

也可以建立乙個外觀和行為像,但與它無任何關係的全新物件,後者通常用於儲存程式元件的松耦合度。

例1:利用標準庫中定義的各種『與檔案類似』的物件,儘管這些物件的工作方式像檔案,但他們沒有繼承內建檔案物件的方法

例2:序列型別有多種形態:字串,列表,元組,但他們直接沒有直接的繼承關係

#二者都像鴨子,二者看起來都像檔案,因而就可以當檔案一樣去用

class

txtfile

:def

read

(self)

:pass

defwrite

(self)

:pass

class

diskfile

:def

read

(self)

:pass

defwrite

(self)

:pass

物件導向之多型

多型即事物存在的多種形態 要有繼承 要有方法重寫 要有父類引用指向子類物件 1,多型中的成員訪問特點之成員變數 編譯看左邊 父類 執行看左邊 父類 2,多型中的成員訪問特點之成員方法 編譯看左邊 父類 執行看右邊 子類 3,多型中的成員訪問特點之靜態成員方法 編譯看左邊 父類 執行看左邊 父類 總結...

物件導向之多型

多型指的是一類事物有多種形態,多型性是指在不考慮例項型別的情況下使用例項 class animals def run self print running class dog animals def run self print dog is running class pig animals de...

物件導向之多型

1.1多型的概述 1.2多型的體現 1.3多型的前提 1.4多型的格式 2.1多型的使用 package csdn public class person public void setname string name public intgetage public void setage int ...