多態(tài)即多種形態(tài),在運(yùn)行時(shí)確定其狀態(tài)窿克,在編譯階段無法確定其類型棕硫,這就是多態(tài)髓涯。Python中的多態(tài)和Java以及C++中的多態(tài)有點(diǎn)不同,Python中的變量是弱類型的哈扮,在定義時(shí)不用指明其類型纬纪,它會根據(jù)需要在運(yùn)行時(shí)確定變量的類型(個(gè)人覺得這也是多態(tài)的一種體現(xiàn))蚓再,并且Python本身是一種解釋性語言,不進(jìn)行預(yù)編譯包各,因此它就只在運(yùn)行時(shí)確定其狀態(tài)摘仅,故也有人說Python是一種多態(tài)語言。在Python中很多地方都可以體現(xiàn)多態(tài)的特性问畅,比如 內(nèi)置函數(shù)len(object)娃属,len函數(shù)不僅可以計(jì)算字符串的長度,還可以計(jì)算列表护姆、元組等對象中的數(shù)據(jù)個(gè)數(shù)矾端,這里在運(yùn)行時(shí)通過參數(shù)類型確定其具體的計(jì)算過程,正是多態(tài)的一種體現(xiàn)卵皂。有些朋友提出Python不支持多態(tài)秩铆,我是完全不贊同的.
Python以它這種獨(dú)有的方式體現(xiàn)多態(tài)的根本原因我覺得有兩點(diǎn):
1)Python是解釋性語言;
2)Python中變量是弱類型的灯变。所以Python體現(xiàn)多態(tài)的方式和Java決然不同殴玛,但是不能因?yàn)橥琂ava中體現(xiàn)多態(tài)的方式不同就認(rèn)為Python不支持多態(tài),這種想法過于片面添祸。
(1)沒有繼承就沒有多態(tài)
(2)如果函數(shù)方法參數(shù)中使用的是父類類型滚粟,則可以傳入父類和子類對象,而不用再去定義多個(gè)函數(shù)來和相應(yīng)的類進(jìn)行匹配了刃泌。
(3)局限性:父類類型的變量不能直接調(diào)用子類特有的方法
雖然多態(tài)在Python中的特征并不明顯凡壤,這里我們還是了解一下多態(tài)的概念和意義。多態(tài)是指一個(gè)名稱可以表示多個(gè)對象蔬咬,這多個(gè)對象有一個(gè)共同的超類鲤遥。那么多態(tài)有什么作用呢,在靜態(tài)語言中林艘,如Java盖奈,如果一個(gè)函數(shù)的形式參數(shù)是Person類型,則所有Person類型及其子類的對象都可以實(shí)際參數(shù)傳入該函數(shù)