python學(xué)了有什么用 python下的抽象類的用途和意義?
python下的抽象類的用途和意義?抽象類不完整,只能用作基類。它不同于非抽象類:1。抽象類不能直接實(shí)例化,對(duì)抽象類使用new運(yùn)算符是編譯時(shí)錯(cuò)誤。盡管某些變量和值在編譯時(shí)可以是抽象類型,但這些變量和值
python下的抽象類的用途和意義?
抽象類不完整,只能用作基類。
它不同于非抽象類:1。抽象類不能直接實(shí)例化,對(duì)抽象類使用new運(yùn)算符是編譯時(shí)錯(cuò)誤。
盡管某些變量和值在編譯時(shí)可以是抽象類型,但這些變量和值必須為null或包含對(duì)從抽象類派生的非抽象類實(shí)例的引用。
2. 允許(但不要求)抽象類包含抽象成員。
3. 抽象類不能被密封。
從抽象類派生非抽象類時(shí),這些非抽象類必須具體實(shí)現(xiàn)所有繼承的抽象成員,以便重寫這些抽象成員。
在以下示例中:抽象類a{public abstract void f()}抽象類B:a{public void g(){}}抽象類C:B{public override void f(){//f}}抽象類a引入抽象方法f。
類B引入另一個(gè)方法g,但由于它不提供f的實(shí)現(xiàn),B也必須聲明為抽象類。
C類重寫F并提供具體的實(shí)現(xiàn)。
由于C中沒有抽象成員,因此可以(但不是必須)將C聲明為非抽象類。
抽象類與接口密切相關(guān)。
但是接口比抽象類更抽象,主要體現(xiàn)在它們的區(qū)別上:1)類可以實(shí)現(xiàn)無(wú)限的接口,但只能繼承一個(gè)抽象類(或任何其他類型)的接口,從抽象類派生的類仍然可以實(shí)現(xiàn)接口,因此,接口被用來解決多重繼承的問題。
2)抽象類可以有非抽象方法,接口不能,抽象類中的方法只是一個(gè)聲明,沒有具體實(shí)現(xiàn)的方法必須用public修改。
3)抽象類中的成員變量可以由不同的修飾符修改,接口中的成員變量默認(rèn)為靜態(tài)final。
4)這也是最重要的一點(diǎn),其實(shí)質(zhì)是“抽象類是對(duì)象的抽象,接口是行為規(guī)范”。
為什么使用抽象基類在Python?
有時(shí)有些類型有一些共同的特點(diǎn),可以抽象形成基類,但基類本身不能實(shí)例化,只有子類可以繼承并實(shí)現(xiàn)抽象方法實(shí)例化子類對(duì)象,這樣的類稱為抽象類。例如,移動(dòng)電話、計(jì)算機(jī)和電視可以歸類為電子設(shè)備。電子設(shè)備是抽象類,具有諸如開機(jī)、運(yùn)行和關(guān)機(jī)等抽象方法。但是,不能直接新建電子設(shè)備類的對(duì)象,因?yàn)椴荒苤付ㄆ涮囟ǖ男螤?、功能和其他信息。您只能從電子設(shè)備類中派生出手機(jī)、計(jì)算機(jī)和電視機(jī),并將它們分開本文給出了不同開機(jī)、運(yùn)行和關(guān)閉方法的具體實(shí)現(xiàn),然后對(duì)這些類的對(duì)象進(jìn)行了新的定義。這就是多態(tài)性的體現(xiàn)。靜態(tài)語(yǔ)言(如C/Java)本機(jī)支持多態(tài)性,并具有抽象關(guān)鍵字,可用于定義抽象類。Python是duck類型的語(yǔ)言,它沒有真正的多態(tài)性,因此它沒有該語(yǔ)言的原生抽象類支持,只能通過第三方封裝類如ABC simulation來實(shí)現(xiàn)。對(duì)于沒有接觸過C和Java的Python學(xué)習(xí)者來說,很難理解。