python不支持多態(tài),也不用支持多態(tài),python是一種多態(tài)語言,崇尚鴨子類型。在程序設(shè)計(jì)中,鴨子類型(英語:ducktyping)是動(dòng)態(tài)類型的一種風(fēng)格。在這種風(fēng)格中,一個(gè)對(duì)象有效的語義,不是由繼承自特定的類或?qū)崿F(xiàn)特定的接口,而是由當(dāng)前方法和屬性的集合決定。這個(gè)概念的名字來源于由JamesWhitcombRiley提出的鴨子測(cè)試,鴨子測(cè)試可以這樣表述:當(dāng)看到一只鳥走起來像鴨子、游泳起來像鴨子、叫起來也像鴨子,那么這只鳥就可以被稱為鴨子。在鴨子類型中,關(guān)注的不是對(duì)象的類型本身,而是它是如何使用的。例如,在不使用鴨子類型的語言中,我們可以編寫一個(gè)函數(shù),它接受一個(gè)類型為鴨的對(duì)象,并調(diào)用它的走和叫方法。在使用鴨子類型的語言中,這樣的一個(gè)函數(shù)可以接受一個(gè)任意類型的對(duì)象,并調(diào)用它的走和叫方法。如果這些需要被調(diào)用的方法不存在,那么將引發(fā)一個(gè)運(yùn)行時(shí)錯(cuò)誤。任何擁有這樣的正確的走和叫方法的對(duì)象都可被函數(shù)接受的這種行為引出了以上表述,這種決定類型的方式因此得名。
10年積累的做網(wǎng)站、成都網(wǎng)站制作經(jīng)驗(yàn),可以快速應(yīng)對(duì)客戶對(duì)網(wǎng)站的新想法和需求。提供各種問題對(duì)應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識(shí)你,你也不認(rèn)識(shí)我。但先網(wǎng)站制作后付款的網(wǎng)站建設(shè)流程,更有扎賚特免費(fèi)網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。
特征:私有屬性與私有方法不能從外部被調(diào)用,也不能被子類繼承
唯一寫法:在屬性或方法前面加上__(兩個(gè)下劃線)
我們寫一個(gè)簡(jiǎn)單的例子,創(chuàng)建一個(gè)類,包含私有方法、私有屬性、普通方法、普通屬性,并生成一個(gè)實(shí)例
私有屬性和私有方法可以從內(nèi)部被調(diào)用(總不能我寫了,但是哪都不讓用吧)
我們?cè)囋囋陬惱镌偌尤胍粋€(gè)新的方法,調(diào)用私有方法和屬性
可以看到,私有屬性和私有方法是可以在類內(nèi)部被調(diào)用的。
舉個(gè)私有屬性應(yīng)用場(chǎng)景的例子
二。object類
我們?cè)囈幌?/p>
三。多繼承
一個(gè)子類可以繼承多個(gè)父類,用逗號(hào)隔開
多個(gè)父類中有同名方法時(shí),按照繼承順序進(jìn)行調(diào)用
四。多態(tài)
當(dāng)不同的實(shí)例,有同名的方法時(shí),我們可以一個(gè)函數(shù),傳入不同的實(shí)例,執(zhí)行對(duì)應(yīng)的方法。
我們定義一個(gè)貓和一個(gè)狗的類,兩個(gè)類中都有'叫'的方法。并各生成一個(gè)實(shí)例。
定義一個(gè)函數(shù),用函數(shù)來調(diào)用'叫'的方法
這就叫多態(tài)。
讓具有不同功能的函數(shù)可以使用相同的函數(shù)名,這樣就可以用一個(gè)函數(shù)名調(diào)用不同內(nèi)容(功能)的函數(shù)。
Python中多態(tài)的特點(diǎn)
1、只關(guān)心對(duì)象的實(shí)例方法是否同名,不關(guān)心對(duì)象所屬的類型;
2、對(duì)象所屬的類之間,繼承關(guān)系可有可無;
3、多態(tài)的好處可以增加代碼的外部調(diào)用靈活度,讓代碼更加通用,兼容性比較強(qiáng);
4、多態(tài)是調(diào)用方法的技巧,不會(huì)影響到類的內(nèi)部設(shè)計(jì)。
接口(python 中的協(xié)議)的多種不同的實(shí)現(xiàn)方式即為多態(tài)。多態(tài)的作用,就是為了類在繼承和派生的時(shí)候,保證使用“家譜”中任一類的實(shí)例的某一屬性時(shí)的正確調(diào)用。
可以看到,在上面的代碼中,只要實(shí)現(xiàn)了 Dock 類中的 swimming 和 Walk 方法,那么這個(gè)類就可以被叫做 Dock 類
應(yīng)用場(chǎng)景 如: for 循環(huán), 在python 中 for 循環(huán)只能用于可迭代對(duì)象, 那么, 我自己定義的類實(shí)現(xiàn)了 __iter__協(xié)議(接口),這個(gè)實(shí)例類就是一個(gè)可迭代對(duì)象,可以被for 循環(huán)使用
python 中定義協(xié)議類協(xié)議使用 @abstractmethod 裝飾器,@abstractmethod 裝飾過的類是不能進(jìn)行初始化的,相對(duì)于c++中的純虛函數(shù)類
這個(gè)類只能當(dāng)做協(xié)議(接口)類
Python是一種純粹的面向?qū)ο笳Z言。面向?qū)ο缶幊讨械乃拇筇卣鞣謩e是:抽象、封裝、繼承和多態(tài)。多態(tài)根據(jù)上下文,對(duì)象可以采用多種形式。程序?qū)⒋_定該對(duì)象每次執(zhí)行所需的含義或用法,從而減少了重復(fù)代碼。
我國(guó)有句俗語:“龍生九子,各有不同”。這就是多態(tài)。多態(tài)是同一類事物具有的多種形態(tài)。多態(tài)是面向?qū)ο缶幊痰闹匾攸c(diǎn)之一。
Python本身就是一種多態(tài)語言:
上述程序中,參數(shù)a和b可以接收不同的數(shù)據(jù)類型。當(dāng)a和b同時(shí)是數(shù)字類型時(shí),add()函數(shù)將進(jìn)行加法運(yùn)算;當(dāng)a和b同時(shí)是字符串類型或列表類型時(shí),add()函數(shù)將進(jìn)行拼接運(yùn)算。
下面用一個(gè)示例來介紹計(jì)算機(jī)編程語言中的多態(tài)。
上述程序中,定義了四個(gè)類,分別是Animal類、People類、Dog類和Pig類,其中People類、Dog類和Pig類都繼承了Animal類。這就體現(xiàn)了同一類事物的多種形態(tài)。這四個(gè)類都有一個(gè)talk()方法。試著調(diào)用talk()方法,代碼如下:
上述程序中,調(diào)用Func()函數(shù)為同一個(gè)操作,但調(diào)用的參數(shù)是不同的,即調(diào)用了不同的實(shí)例作為參數(shù)。由運(yùn)行結(jié)果可知,有不同的類創(chuàng)建不同的實(shí)例,以不同的實(shí)例作為參數(shù)時(shí),調(diào)用talk()得到的打印結(jié)果是不同的,這是因?yàn)槊總€(gè)實(shí)例具有不同的實(shí)現(xiàn)方式,這就是多態(tài)性的體現(xiàn)。
多態(tài)性是同一個(gè)操作因作用實(shí)例不同而表現(xiàn)出不同實(shí)現(xiàn)方式的特性。多態(tài)性增加了程序的靈活性,以不變應(yīng)萬變,無論實(shí)例千變?nèi)f化,使用者都是以同一種形式去調(diào)用;多態(tài)性還增加了程序可擴(kuò)展性,通過繼承創(chuàng)建新的類,子類可以使用父類的方法,也可以使用自己重寫的方法。
關(guān)于深度學(xué)習(xí)的基礎(chǔ)問題可以看下這個(gè)網(wǎng)頁的視頻教程,網(wǎng)頁鏈接,希望我的回答能幫到你。