python中的抽象超類,Python 超類

本文目錄一覽:

Python中超類和子類有什麼區別

class a:

       pass

class b(a):

      pass

b類從a類繼承而來,a就是超類,b就是子類,b類可以使用a類定義的方法,也可以在a類的基礎上定義新的方法,a是基礎類,b是a的擴展

python抽象基類是什麼?用途是什麼?

有時候某些類型都有一些共同的特徵,它們可以被抽象出來形成一個基類,但這個基類本身不能實例化,只能由子類繼承並實現其中的抽象方法後實例化子類對象,這樣的類叫抽象類。

例如手機、電腦、電視機都可以歸類到電子設備,電子設備就是一個抽象類,它具有通電、運行、關閉等抽象方法,但你不可以直接new一個電子設備類的對象,因為沒法給它指定具體的形狀、功能等信息,只能從電子設備類派生出手機類、電腦類、電視類,並分別給出不同的通電、運行、關閉方法的具體實現,然後new這些類的對象。這就是多態的體現,C++/Java等靜態語言原生支持多態,擁有abstract關鍵字,可以用來定義抽象類。

而Python是一門鴨子類型的語言,它並不具有真正的多態,所以也沒有語言原生的抽象類支持,只能通過第三方的封裝類如ABC模擬實現。對於沒有接觸過C++和Java的Python學習者來說較難理解。

python下的抽象類的用途和意義?

抽象方法是基類中定義的方法,但卻沒有任何實現。在java中,可以把方法申明成一個接口。而在python中實現一個抽象方法的簡單的方法是:

class Sheep(object):

def get_size(self):

raise NotImplementedError

任何從Sheep繼承下來的子類必須實現get_size方法。否則就會產生一個錯誤。但這種實現方法有個缺點。定義的子類只有調用那個方法時才會拋錯。這裡有個簡單方法可以在類被實例化後觸發它。使用python提供的abc模塊。

import abc

class Sheep(object):

__metaclass__ = abc.ABCMeta

@abc.absractmethod

def get_size(self):

return

這裡實例化Sheep類或任意從其繼承的子類(未實現get_size)時候都會拋出異常。

因此,通過定義抽象類,可以定義子類的共同method(強制其實現)。

python中的super是什麼?-

目錄

python中的super,名為超類,可以簡單的理解為執行父類的__init__函數。由於在python中不論是一對一的繼承,還是一子類繼承多個父類,都會涉及到執行的先後順序的問題。那麼本文就着重看下super的具體作用。

通過設計這樣一個案例,我們可以明確super的前後邏輯關係:先定義一個父類 initial ,在這個父類中有參數值 param 和函數 func ,然後用子類 new 來繼承父類 initial 。繼承之後,在子類的 __init__ 函數中 super 執行的前後去打印參數值 param 和函數 func 的返回值,相關代碼如下所示:

代碼的執行結果如下所示:

首先我們注意到,父類 initial 中的 __init__ 函數內的打印語句,是在super之後才輸出的,這說明了, super 函數是在執行父類的初始化操作。那麼如果沒有執行 super , new 子類對 initial 父類的繼承體現在哪裡呢?答案就是父類的成員函數,比如這樣的一個案例:

其實就是刪掉了子類中重載的成員函數,那麼得到的結果如下:

可以發現在執行super之前就可以打印父類的 func 函數的函數值。所以python中繼承的邏輯是這樣的:

initial.func() new.__init__() new.func()/new.param super() initial.__init__()/initial.param new.__init__()/new.paraminitial.func() new.__init__() new.func()/new.param super() initial.__init__()/initial.param new.__init__()/new.param

也正是因為只有執行了 super 才能初始化父類中的成員變量,因此如果在super之前是無法訪問父類的成員變量的。

本文通過一個python的實際案例的設計,來講解python面向對象的技術——類的繼承中必用的super函數的邏輯。其實我們可以把python中類的繼承理解成這樣的一個過程:當我們在括號中明確了父類時,其實已經引用了父類的成員函數,但是並沒有執行父類的初始化函數。在執行子類的初始化函數的同時,會檢查是否重載了父類的成員函數,如果重載則會直接覆蓋。而只有在執行了super之後,才相當於執行了父類的初始化函數,此時才可以訪問父類的成員變量。

本文首發鏈接為:

作者ID:DechinPhy

更多原著文章請參考:

打賞專用鏈接:

騰訊雲專欄同步:

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/280472.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-21 13:03
下一篇 2024-12-21 13:03

相關推薦

  • Python計算陽曆日期對應周幾

    本文介紹如何通過Python計算任意陽曆日期對應周幾。 一、獲取日期 獲取日期可以通過Python內置的模塊datetime實現,示例代碼如下: from datetime imp…

    編程 2025-04-29
  • Python列表中負數的個數

    Python列表是一個有序的集合,可以存儲多個不同類型的元素。而負數是指小於0的整數。在Python列表中,我們想要找到負數的個數,可以通過以下幾個方面進行實現。 一、使用循環遍歷…

    編程 2025-04-29
  • 如何查看Anaconda中Python路徑

    對Anaconda中Python路徑即conda環境的查看進行詳細的闡述。 一、使用命令行查看 1、在Windows系統中,可以使用命令提示符(cmd)或者Anaconda Pro…

    編程 2025-04-29
  • Python周杰倫代碼用法介紹

    本文將從多個方面對Python周杰倫代碼進行詳細的闡述。 一、代碼介紹 from urllib.request import urlopen from bs4 import Bea…

    編程 2025-04-29
  • Python中引入上一級目錄中函數

    Python中經常需要調用其他文件夾中的模塊或函數,其中一個常見的操作是引入上一級目錄中的函數。在此,我們將從多個角度詳細解釋如何在Python中引入上一級目錄的函數。 一、加入環…

    編程 2025-04-29
  • 蝴蝶優化算法Python版

    蝴蝶優化算法是一種基於仿生學的優化算法,模仿自然界中的蝴蝶進行搜索。它可以應用於多個領域的優化問題,包括數學優化、工程問題、機器學習等。本文將從多個方面對蝴蝶優化算法Python版…

    編程 2025-04-29
  • python強行終止程序快捷鍵

    本文將從多個方面對python強行終止程序快捷鍵進行詳細闡述,並提供相應代碼示例。 一、Ctrl+C快捷鍵 Ctrl+C快捷鍵是在終端中經常用來強行終止運行的程序。當你在終端中運行…

    編程 2025-04-29
  • Python程序需要編譯才能執行

    Python 被廣泛應用於數據分析、人工智能、科學計算等領域,它的靈活性和簡單易學的性質使得越來越多的人喜歡使用 Python 進行編程。然而,在 Python 中程序執行的方式不…

    編程 2025-04-29
  • Python字典去重複工具

    使用Python語言編寫字典去重複工具,可幫助用戶快速去重複。 一、字典去重複工具的需求 在使用Python編寫程序時,我們經常需要處理數據文件,其中包含了大量的重複數據。為了方便…

    編程 2025-04-29
  • Python清華鏡像下載

    Python清華鏡像是一個高質量的Python開發資源鏡像站,提供了Python及其相關的開發工具、框架和文檔的下載服務。本文將從以下幾個方面對Python清華鏡像下載進行詳細的闡…

    編程 2025-04-29

發表回復

登錄後才能評論