Python基礎(chǔ)入門(mén)教程26:企業(yè)級(jí)開(kāi)發(fā)基礎(chǔ)7 面向?qū)ο筇卣鳎ǘ鄳B(tài))
來(lái)源:
奇酷教育 發(fā)表于:
面向?qū)ο蟪绦蛟O(shè)計(jì)最主要的有三個(gè)特征:封裝、繼承、多態(tài)本節(jié)內(nèi)容主要講解面向?qū)ο蟮牡谝粋€(gè)特征:多態(tài)1 多態(tài)的意義多態(tài)是讓我們的程序在運(yùn)
面向?qū)ο蟪绦蛟O(shè)計(jì)最主要的有三個(gè)特征:封裝、繼承、多態(tài)
本節(jié)內(nèi)容主要講解面向?qū)ο蟮牡谝粋€(gè)特征:多態(tài)
1 多態(tài)的意義
多態(tài)是讓我們的程序在運(yùn)行的過(guò)程中,在不同的狀態(tài)下進(jìn)行動(dòng)態(tài)的切換,實(shí)現(xiàn)復(fù)雜的功能為目的的一種程序開(kāi)發(fā)手段
在之前的章節(jié)中,實(shí)現(xiàn)了類型的繼承關(guān)系之后,其實(shí)我們已經(jīng)見(jiàn)過(guò)多態(tài)的一種操作了:方法重寫(xiě)實(shí)現(xiàn)的運(yùn)行時(shí)多態(tài),對(duì)象在執(zhí)行具體的方法時(shí),會(huì)直接執(zhí)行父類中繼承的對(duì)應(yīng)的方法,如果該方法在子類中重寫(xiě)了,就會(huì)執(zhí)行子類中重寫(xiě)過(guò)的方法,實(shí)現(xiàn)的是一種運(yùn)行過(guò)程中的多態(tài)處理,代碼如下:
2. 多態(tài)的擴(kuò)展
我們定義一個(gè)這樣的醫(yī)療系統(tǒng),所有的男人、女人、小孩等等都可以去醫(yī)院看病,然后康復(fù)的一個(gè)過(guò)程。
上面的代碼中,我們已經(jīng)可以看到,只要是從Person類型繼承過(guò)來(lái)的類型所創(chuàng)建的對(duì)象,都可以在醫(yī)院Hospital對(duì)象的care()中進(jìn)行治療。已經(jīng)是一種多態(tài)。
同時(shí)如果功能需要擴(kuò)展,需要多出來(lái)一個(gè)人物類型:小孩,小孩也會(huì)生病,也需要治療~此時(shí)對(duì)于功能的擴(kuò)展非常簡(jiǎn)潔,值需要添加如下代碼就可以搞定:
2. 多態(tài)的完善
上面的代碼中,我們其實(shí)是存在一定的缺陷的
上述代碼設(shè)計(jì)的初衷是醫(yī)院對(duì)象可以治病救人,也就是Hosiptal對(duì)象的care()函數(shù)可以治療Person派生出來(lái)的對(duì)象。
但是從代碼邏輯中,我們可以看到只要傳遞給care()函數(shù)的參數(shù)對(duì)象中包含health()函數(shù)就可以進(jìn)行處理,而并非必須是Person對(duì)象。
此時(shí)需要在函數(shù)中進(jìn)行判斷處理,如果是Person對(duì)象就進(jìn)行care()治療的處理,如果不是Person對(duì)象,就提示不做治療操作。
對(duì)象和類型的判斷可以通過(guò)isinstance(obj, Type)進(jìn)行類型的判斷,如:
上述代碼中,我們可以觀察到通過(guò)isinstance()函數(shù)進(jìn)行變量所屬數(shù)據(jù)類型的判斷了,同時(shí)在繼承關(guān)系中,有一個(gè)情理之中的判斷結(jié)果:man是Man類型的,同時(shí)也是Person類型的,因?yàn)镸an類型是從Person類型繼承過(guò)來(lái)的。
所以可以對(duì)之前的Hospital的care()函數(shù)進(jìn)行如下改造:
>>>更多VR/AR入門(mén)教程:VR入門(mén)