python 因?yàn)樽兞吭谫x值的時(shí)候才確定類型的,所以這用抽象類這個(gè)東西也行的,你在實(shí)現(xiàn)多態(tài)的時(shí)候cacth一下exctption就行了
創(chuàng)新互聯(lián)長(zhǎng)期為千余家客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對(duì)不同對(duì)象提供差異化的產(chǎn)品和服務(wù);打造開(kāi)放共贏平臺(tái),與合作伙伴共同營(yíng)造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為千山企業(yè)提供專業(yè)的網(wǎng)站設(shè)計(jì)制作、成都網(wǎng)站設(shè)計(jì),千山網(wǎng)站改版等技術(shù)服務(wù)。擁有十年豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開(kāi)發(fā)。
times函數(shù)為例談?wù)劧鄳B(tài),就像我們看到的那樣,times函數(shù)中表達(dá)式×*y的意義完全取決于x和y的對(duì)象類型,同樣的函數(shù),在一個(gè)實(shí)例下執(zhí)行的是乘法,在另一個(gè)實(shí)例下執(zhí)行的卻是重復(fù)。Python把對(duì)某一對(duì)象在某種語(yǔ)法下的合理性交給那個(gè)對(duì)象自身來(lái)判斷。實(shí)際上,*作為一個(gè)分派機(jī)制,將執(zhí)行的控制權(quán)移交給被處理的對(duì)象。
這種依賴類型的行為稱為多態(tài),其含義就是一個(gè)操作的意義取決于被操作對(duì)象的類型。因?yàn)镻ython是動(dòng)態(tài)類型語(yǔ)言,所以多態(tài)在Python中隨處可見(jiàn)。事實(shí)上,在 Python中所有操作都是多態(tài)的操作:print、index、*運(yùn)算符,以及更多。這實(shí)際上是有意而為的,并且從很大程度上算作是這門語(yǔ)言簡(jiǎn)潔性和靈活性的一個(gè)表現(xiàn)。例如,函數(shù)可以自動(dòng)地應(yīng)用到所有類別的對(duì)象上。只要對(duì)象支持所預(yù)期的接口(也稱為協(xié)議),函數(shù)就能處理它們。也就是說(shuō),如果傳給函數(shù)的對(duì)象支持預(yù)期的方法和表達(dá)式運(yùn)算符,那么它們對(duì)函數(shù)的邏輯來(lái)說(shuō)就是有著即插即用的兼容性。
即使是簡(jiǎn)單的times 函數(shù),對(duì)任意兩個(gè)支持*的對(duì)象都可以執(zhí)行,無(wú)論它是哪種類型,也不管它是何時(shí)編寫(xiě)的。這個(gè)函數(shù)對(duì)于數(shù)字來(lái)說(shuō)是有效的(執(zhí)行乘法),或者一個(gè)字符串和一個(gè)數(shù)字(執(zhí)行重復(fù)),或者任意其他支持?jǐn)U展接口的兼容對(duì)象——甚至是我們尚未編寫(xiě)過(guò)的基于類的對(duì)象。
在Python中,一個(gè)對(duì)象可以同時(shí)是數(shù)值對(duì)象、序列對(duì)象、關(guān)聯(lián)對(duì)象,關(guān)鍵看它支持哪些操作,也就是定義了哪些非NULL的函數(shù)指針。
因此,Python對(duì)象的多態(tài)性是基于行為的,而不像C++/Java等語(yǔ)言中多態(tài)性是基于類型的。Python對(duì)象實(shí)際上是全類型的,可以有的函數(shù)指針全部都有,只不過(guò)很多函數(shù)指針都是NULL,只要你實(shí)現(xiàn)了該函數(shù),python對(duì)象就能表現(xiàn)出該行為。