Python3面向物件----------多型
(很抱歉我還沒寫到多型,就有了6百多的訪問量,感覺很慚愧。但是我昨天晚上10點結束筆記,只是先寫了標題以做好週六自習要複習的內容,今天一開啟看見空文件被閱讀了600+,真是腦殼痛,話不多說,看內容)
Python3面向物件--------多型
其實,準確的說,Python中多型的概念並不明確。那麼多型的概念是什麼呢
多型:顧名思義,多種形態,一種事物的多種體現形式。繼承是多型的前提
在Python中一個變數可以被賦予多種型別的值,但是前提必須保證這些型別有共同的行為,不然系統會報錯
拿一個例項來說:
案例效果:
小王餵過動物了!
貓吃魚
小王餵過動物了!
狗吃骨頭
小王餵過動物了!
兔子吃草
分析:1.類: 人 動物(貓 狗 兔 )
人: 行為: 喂 屬性: 人名
動物: 行為:吃 屬性:動物名 動物吃的食物(食物可以另起一個函式)
(在面向物件類的分法上有很多,不同的想法往往可以有很多做法,我這裡寫的是為了好介紹多型的分法)
class Person:
def __init__(self):
self.name=None
def feed(self,):
print("%s餵過動物了"%self.name)
class Animal:
def __init__(self):
self.name=None
def food(self):
self.food=None
def eat(self):
print('%s吃%s'%(self.name,self.food))
2.分析完類和類的屬性和行為,接下來便是建立物件了
分別建立人的物件和動物的物件
p=Person()
p.name='小王'
p.feed()
a=Animal()
a.name='貓'
a.food='魚'
a.eat()
執行結果:小王餵過動物了
貓吃魚
在這個案例中,你可以為Person類的name賦予不同的值,Animal類的name和food也一樣,根據不同的需求,你可以為他們賦予不同的值,這本身就是多型的一種表現,就相當於 你先讓a=1 然後又讓a=[1,2,,3]又或者讓a={1,2,3},Python3中程式的執行順序是從上往下,從左往右依次執行,程式的結果是編譯一行執行一行。
再看接下來的這幾行程式碼:
p=Person()
p.name='小王'
p.feed()
b=Animal()
a=b
a.name='貓'
a.food='魚'
a.eat()
上邊的程式碼我讓b成為了Animal類的物件,那麼b就獲得的Animal類所有的屬性和行為,這時我建立了一個物件a,注意我並沒有直接建立Animal類的物件a,而是把物件b賦予了物件a,那麼a能不能獲得Animal累的所有屬性和行為呢?
執行結果:小王餵過動物了
貓吃魚
結果一樣!說明a獲得了物件b的屬性和行為,上邊說過了,一個變數可以被賦予多種型別的值,而你想讓物件a獲得Animal類的屬性和行為,你的目的是和物件b相同的,所以物件a和物件b就具備相同行為的前提,所以物件b的屬性和行為就傳遞給了物件a,那麼如果沒有具備相同行為呢?結果是怎麼樣的呢?我讓b成為Person類的物件,然後a=b,但是物件a賦值是Animal類的屬性和行為,這時,不用想,程式肯定會報錯。
以上就是我對Python3面向物件------多型的理解,因為博主也是初學Python3,有很多東西都還停留在表層的理解,如果我的部落格有任何錯誤,請及時評論或者私信我,我會及時更改。也歡迎同樣學習Python的你願意關注我的部落格,我會把我每週的學習內容進行整理和上傳,方便大家溝通和交流學習經驗。