74 類的多型和多型性

2022-05-02 23:33:15 字數 3463 閱讀 2296

目錄

二、多型性

三、多型性的好處

四、小結

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

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

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

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

# 動物有多種形態:人類、豬、狗

class animal:

def run(self): # 子類約定俗稱的必須實現這個方法

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

class people(animal):

def run(self):

print('人正在走')

class pig(animal):

def run(self):

print('pig is walking')

class dog(animal):

def run(self):

print('dog is running')

peo1 = people()

pig1 = pig()

d1 = dog()

peo1.run()

pig1.run()

d1.run()

# 人正在走

# pig is walking

# dog is running

import abc

class animal(metaclass=abc.abcmeta): # 同一類事物:動物

@abc.abstractmethod # 上述**子類是約定俗稱的實現這個方法,加上@abc.abstractmethod裝飾器後嚴格控制子類必須實現這個方法

def talk(self):

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

class 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')

peo2 = people()

pig2 = pig()

d2 = dog()

peo2.talk()

pig2.talk()

d2.talk()

# say hello

# say aoao

# say wangwang

1.2 檔案的多種形態

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')

text = text()

exe_file = exefile()

text.click()

exe_file.click()

open file

execute file

注意:多型與多型性是兩種概念

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

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

def func(obj):

obj.run()

func(peo1)

func(pig1)

func(d1)

# 人正在走

# pig is walking

# dog is running

# 多型性依賴於:繼承

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

def func(obj): # obj這個引數沒有型別限制,可以傳入不同型別的值

obj.talk() # 呼叫的邏輯都一樣,執行的結果卻不一樣

func(peo2)

func(pig2)

func(d2)

# say hello

# say aoao

# say wangwang

def func(obj):

obj.click()

func(text)

func(exe_file)

open file

execute file

def func(obj):

print(len(obj))

func('hello')

func([1, 2, 3])

func((1, 2, 3))

#5#3

#3

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

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

增加了程式的靈活性:以不變應萬變,不論物件千變萬化,使用者都是同一種形式去呼叫,如func(animal)

增加了程式額可擴充套件性:通過繼承animal類建立了乙個新的類,使用者無需更改自己的**,還是用func(animal)去呼叫

class cat(animal):  # 屬於動物的另外一種形態:貓

def talk(self):

print('say miao')

def func(animal): # 對於使用者來說,自己的**根本無需改動

animal.talk()

cat1 = cat() # 例項出乙隻貓

func(cat1) # 甚至連呼叫方式也無需改變,就能呼叫貓的talk功能

#say miao

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

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

類的多型與多型性

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

類的多型性

類的多型 多型就是指在程式執行時,執行的雖然是乙個呼叫方法的語句,卻可以根據派生類物件的型別的不同完成方法不同的具體實現 當派生類從基類繼承時,它會獲得積累的所有方法,字段,屬性,和事件.派生類可以選擇 1.繼承最接近的基類方法而不是重寫它 2.重寫基類中的虛擬成員.3.定義隱藏類實現的成員的新非虛...

Python多型和多型性

python多型和多型性 python 中的多型是指一類事務有多種形態。比如動物有多種形態,人,狗,貓,等等。import abc class animal metaclass abc.abcmeta 同一類事物 動物 abc.abstractmethod def talk self pass cl...