python中的super是什麼?

2022-10-09 03:27:08 字數 2650 閱讀 8886

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

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

# 定義父類

class initial(object):

def __init__(self):

print ('this print is from initial object')

# 定義父類引數

self.param = 3

# 定義父類函式

def func(self):

return 1

# 定義子類

class new(initial):

def __init__(self):

print ('this print is from new object')

# 列印子類函式值

print (self.func())

# 執行父類初始化函式

super(new, self).__init__()

# 列印父類引數值

print(self.param)

self.param = 4

# 定義子類函式

def func(self):

return 2

if __name__ == '__main__':

new()

**的執行結果如下所示:

this print is from new object

2this print is from initial object

3

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

class initial(object):

def __init__(self):

print ('this print is from initial object')

self.param = 3

def func(self):

return 1

class new(initial):

def __init__(self):

print ('this print is from new object')

print (self.func())

super(new, self).__init__()

print(self.param)

self.param = 4

if __name__ == '__main__':

new()

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

this print is from new object

1this print is from initial object

3

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

\[initial.func()\\

\downarrow\\

new.\_\_init\_\_()\\

\downarrow\\

new.func()/new.param\\

\downarrow\\

super()\\

\downarrow\\

initial.\_\_init\_\_()/initial.param\\

\downarrow\\

new.\_\_init\_\_()/new.param

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

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

本文首發鏈結為:

作者id:dechinphy

更多原著文章請參考:

python結果 Python中 的結果是什麼?

像這樣的表情x y計算為x y.優先順序與運算子相同。分組 及 乘法 9 2 9 2 9除以2等於4。4乘2等於8 9減8是1 剩餘部分。python抓到了 取決於您使用的python版本,也是 不推薦的 字串內插運算子,因此請注意,如果您來自具有自動型別轉換 如php或js 的語言,其中的表示式如...

python中的鍵 python中鍵值是什麼?

你說得就是python中的字典物件 它是由鍵值對這樣的資料組成,以下內容來自 python成為專業人士筆記 dictionary字典介紹 字典是鍵值儲存的乙個例子,在python中也稱為對映。它允許您通過引用鍵來儲存和檢索元素。由於字典是按鍵引用的,所以查詢速度非常快。由於它們主要用於按鍵去索引所有...

Python中super的用法

super 是用來解決多重繼承問題的,直接用類名呼叫父類方法在使用單繼承的時候沒問題,但是如果使用多繼承,會涉及到查詢順序 mro 重複呼叫 鑽石繼承 等種種問題。總之前人留下的經驗就是 保持一致性。要不全部用類名呼叫父類,要不就全部用 super,不要一半一半。普通繼承 python view p...