實踐解讀丨Python 物件導向三大特徵之多型

2022-01-10 18:56:47 字數 2262 閱讀 2969

摘要:多型從字面意思上看就是多種形態,在我們python的物件導向裡就是不同的物件在接收相同方法或者函式時會產生不同的行為,也就是說,每個物件可以用自己的方式去響應共同的函式,不同的方式實現不同的結果。
多型從字面意思上看就是多種形態,比如人有黑種人,黃種人,白種人等等,這就是一類事物的不同形態,在我們python的物件導向裡就是不同的物件在接收相同方法或者函式時會產生不同的行為,也就是說,每個物件可以用自己的方式去響應共同的函式,不同的方式實現不同的結果。

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

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

import abc

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

@abc.abstractmethod

def talk(self):

pass

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

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

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

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

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

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

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

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

peo=people()

dog=dog()

pig=pig()

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

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

peo.talk()

dog.talk()

pig.talk()

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

def func(obj):

obj.talk()

逗比時刻:

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

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

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

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

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

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

class txtfile:

def read(self):

pass

def write(self):

pass

class diskfile:

def read(self):

pass

def write(self):

pass

點選關注,第一時間了解華為雲新鮮技術~

趣味解讀Python物件導向程式設計 類和物件

考慮現實生活中,我們的思維方式是放在學生這個個人上,是學生做了自我介紹。而不是像我們剛剛寫出的 先有了介紹的行為,再去看介紹了誰。用我們的現實思維方式該怎麼用程式表達呢?今天來學習一種新的程式設計方式 物件導向程式設計 object oriented programming,oop,物件導向程式設計...

Python實踐 物件導向方法模擬簡單計算器

學習物件導向後,迫不及待的嘗試了寫一些簡單的計算器 如下 class calculator 計算器類 def init self,a,b self.a a self.b b defadd self 兩數相加 return self.a self.b defsub self 兩數相減 return s...

物件導向實踐 模擬ArrayBox

arraybox是乙個類似陣列的東西,可以儲存任何東西,可以得到某乙個元素 可以刪除 插入 遍歷 但是與陣列不同的是arraybox沒有長度限制。程式是設計,程式設計就是按照我們平常做事的思維幫助使用者更好的使用。public class arraybox public arraybox int c...