Python多型 鴨子型別

2022-09-17 12:03:09 字數 2136 閱讀 9858

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

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

import

abcclass 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

abcclass 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是一種多型語言,崇尚鴨子型別。以下是維基百科中對鴨子型別得論述:

在程式設計中,鴨子型別(英語:duck typing)是動態型別的一種風格。在這種風格中,乙個物件有效的語義,不是由繼承自特定的類或實現特定的介面,而是由當前方法和屬性的集合決定。這個概念的名字**於由james whitcomb riley提出的鴨子測試,「鴨子測試」可以這樣表述:

「當看到乙隻鳥走起來像鴨子、游泳起來像鴨子、叫起來也像鴨子,那麼這只鳥就可以被稱為鴨子。」

在鴨子型別中,關注的不是物件的型別本身,而是它是如何使用的。例如,在不使用鴨子型別的語言中,我們可以編寫乙個函式,它接受乙個型別為鴨的物件,並呼叫它的走和叫方法。在使用鴨子型別的語言中,這樣的乙個函式可以接受乙個任意型別的物件,並呼叫它的走和叫方法。如果這些需要被呼叫的方法不存在,那麼將引發乙個執行時錯誤。任何擁有這樣的正確的走和叫方法的物件都可被函式接受的這種行為引出了以上表述,這種決定型別的方式因此得名。

鴨子型別通常得益於不測試方法和函式中引數的型別,而是依賴文件、清晰的**和測試來確保正確使用。從靜態型別語言轉向動態型別語言的使用者通常試圖新增一些靜態的(在執行之前的)型別檢查,從而影響了鴨子型別的益處和可伸縮性,並約束了語言的動態特性。

python 多型和鴨子型別

多型 class animal def say self print 動物在叫 class people animal def say self super say print 嚶嚶嚶 class dog animal def say self super say print 汪汪汪 class p...

多型與鴨子型別 perperty

1.什麼是多型 多型指的是同一種 類事物的不同形態 2.為何要用多型 多型性 在多型的背景下,可以在不用考慮物件具體型別的前提下而直接使用物件 多型性的精髓 統一 3.如何用多型 class animal def speak self pass class people animal def shu...

多型 多型性和鴨子型別

目錄多型指的是同一種事物有多種形態,比如水有液態 固態和氣態。乙個抽象類有多個子類,因而多型的概念依賴於繼承。class animal def talk self pass class dog animal def talk self print 汪汪汪 class cat animal def t...