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