1. 程式人生 > >Python3面向物件----------多型

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的你願意關注我的部落格,我會把我每週的學習內容進行整理和上傳,方便大家溝通和交流學習經驗。