python多型 Python3 7之多型與多型性

2021-10-11 05:05:10 字數 2088 閱讀 3114

一、多型

二、多型性

1.什麼是多型性?

多型性是指在不考慮例項型別的情況下使用例項,多型性分為靜態多型性和動態多型性

靜態多型性:如任何型別都可以用運算子+進行運算

動態多型性:如下

import abc

class animals(metaclass=abc.abcmeta):

@abc.abstractmethod

def talk(self):

pass

class people(animals):

def talk(self):

print('people is talking')

class cat(animals):

def talk(self):

print('cat is miaomiao')

class dog(animals):

def talk(self):

print('dog is wangwang')

cat1 = cat()

dog1 = dog()

peo1 = people()

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

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

peo1.talk()

dog1.talk()

peo1.talk()

# 定義乙個統一的介面來訪問

def func(obj):

obj.talk()

func(cat1)

2.為什麼要用多型性?

①增加了程式的靈活性

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

②增加了程式額可擴充套件性

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

class pig(animals): # 屬於動物的另外一種形態:豬

def talk(self):

print('pig is huohuo')

pig = pig()

# 統一介面,對於使用者來說,自己的**根本無需改動

def func(obj):

obj.talk()

func(pig) # 甚至連呼叫方式都無需改變,就能呼叫出pig的talk功能

三、鴨子型別

在鴨子型別中,關注的不是物件的型別本身,而是它是如何使用的。

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

鴨子型別通常得益於不測試方法和函式中引數的型別,而是依賴文件、清晰的**和測試來確保正確使用。

class duck():

def walk(self):

print('i walk like a duck')

def swim(self):

print('i swim like a duck')

class person():

def walk(self):

print('this one walk like a duck')

def swim(self):

print('this man swim like a duck')

可以很明顯的看出,person類擁有跟duck類一樣的方法,當有乙個函式呼叫duck類,並利用到了兩個方法walk()和swim()。我們傳入person類也一樣可以執行,函式並不會檢查物件的型別是不是duck,只要他擁有walk()和swim()方法,就可以正確的被呼叫。

再舉例,如果乙個物件實現了__getitem__方法,那python的直譯器就會把它當做乙個collection,就可以在這個物件上使用切片,獲取子項等方法;如果乙個物件實現了__iter__和next方法,python就會認為它是乙個iterator,就可以在這個物件上通過迴圈來獲取各個子項。

Python 3 多型與多型性

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

python3 類的多型與多型性

解釋的很深刻 很多人喜歡將多型與多型性二者混為一談,然後百思不得其解,其實只要分開看,就會很明朗。多型指的是一類事物有多種形態,乙個抽象類有多個子類,因而多型的概念依賴於繼承 序列型別有多種形態 字串,列表,元組 動物有多種形態 人,狗,豬 多型 同一種事物的多種形態,動物分為人類,豬類 在定義角度...

python3 切片 python3 切片

取乙個list或tuple的部分元素是非常常見的操作。比如,乙個list如下 l michael sarah tracy bob jack 取前3個元素,應該怎麼做?笨辦法 l 0 l 1 l 2 michael sarah tracy 之所以是笨辦法是因為擴充套件一下,取前n個元素就沒轍了。取前n...