python3 類的多型與多型性

2022-07-24 17:42:30 字數 3620 閱讀 8513

**:   解釋的很深刻

很多人喜歡將多型多型性二者混為一談,然後百思不得其解,其實只要分開看,就會很明朗。

多型指的是一類事物有多種形態,(乙個抽象類有多個子類,因而多型的概念依賴於繼承)

序列型別有多種形態:字串,列表,元組

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

#

多型:同一種事物的多種形態,動物分為人類,豬類(在定義角度)

class

animal:

defrun(self):

raise attributeerror('

子類必須實現這個方法')

class

people(animal):

defrun(self):

print('

人正在走')

class

pig(animal):

defrun(self):

print('

pig is walking')

class

dog(animal):

defrun(self):

print('

dog is running')

peo1=people()

pig1=pig()

d1=dog()

peo1.run()

pig1.run()

d1.run()

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

')

(1)什麼是多型性(注意:多型與多型性是兩種概念)

多型性是指具有不同功能的函式可以使用相同的函式名,這樣就可以用乙個函式名呼叫不同內容的函式。在物件導向方法中一般是這樣表述多型性:向不同的物件傳送同一條訊息,不同的物件在接收時會產生不同的行為(即方法)。也就是說,每個物件可以用自己的方式去響應共同的訊息。所謂訊息,就是呼叫函式,不同的行為就是指不同的實現,即執行不同的函式。

#

多型性:一種呼叫方式,不同的執行效果(多型性)

deffunc(obj):

obj.run()

func(peo1)

func(pig1)

func(d1)

#peo1.run()

#pig1.run()

#多型性依賴於:繼承

##多型性:定義統一的介面,

def func(obj): #

obj這個引數沒有型別限制,可以傳入不同型別的值

obj.run() #

呼叫的邏輯都一樣,執行的結果卻不一樣

引數animal就是對態性的體現

... animal.talk()

...>>> people1=people() #

產生乙個人的物件

>>> pig1=pig() #

產生乙個豬的物件

>>> dog1=dog() #

產生乙個狗的物件

>>>func(people1)

say hello

>>>func(pig1)

say aoao

>>>func(dog1)

say wangwang

3、

>>> def

func(f):

... f.click()

...>>> t1=text()

>>> e1=exefile()

>>>func(t1)

open file

>>>func(e1)

execute file

綜上可以說,多型性是乙個介面(函式func),多種實現(如f.click())

其實大家從上面多型性的例子可以看出,我們並沒有增加上面新的知識,也就是說python本身就是支援多型性的,這麼做的好處是什麼呢?

(1)增加了程式的靈活性

以不變應萬變,不論物件千變萬化,使用者都是同一種形式去呼叫,如func(animal)

(2)增加了程式額可擴充套件性

通過繼承animal類建立了乙個新的類,使用者無需更改自己的**,還是用func(animal)去呼叫

>>> class cat(animal): #

屬於動物的另外一種形態:貓

... def

talk(self):

...

print('

say miao')

...>>> def func(animal): #

對於使用者來說,自己的**根本無需改動

... animal.talk()

...>>> cat1=cat() #

例項出乙隻貓

>>> func(cat1) #

甚至連呼叫方式也無需改變,就能呼叫貓的talk功能

say miao

'''這樣我們新增了乙個形態cat,由cat類產生的例項cat1,使用者可以在完全不需要修改自己**的情況下。使用和人、狗、豬一樣的方式呼叫cat1的talk方法,即func(cat1)

'''

注:多型:同一種事物的多種形態,動物分為人類,豬類(在定義角度) 多型性:一種呼叫方式,不同的執行效果(多型性)

Python 3 多型與多型性

多型 同一事物的多種形態 多型性 指的是可以在不考慮物件的型別的情況下而直接使用物件 import abc class animal metaclass abc.abcmeta 同一事物 動物 abc.abstractmethod def talk self pass class people an...

python 類的多型與多型性

多型 多型指的是一類事物有多種形態 如 動物有多種形態 人 狗 豬。多型性 指在不考慮例項型別的情況下使用例項,多型性分為靜態多型性和動態多型性。靜態多型性 任何型別都可以用運算子 進行運算。eg 字串 字串 數字 數字 列表 列表。我們在使用 號時也沒有考慮型別 動態多型性如下 動態多型性 imp...

類的多型與多型性

多型是指一類事物有多種形態 class animal def speak self print f 開口說話 動物的形態之一 人 class people animal def speak self print 呵呵呵 動物的形態之二 狗 class duck animal def speak se...