python教程 super 的用法

2021-10-12 01:31:17 字數 931 閱讀 7122

super()是用來呼叫父類(超類)的乙個方法。

super是用來解決多重繼承問題的。直接用類名呼叫父類方法在使用單繼承的時候沒問題,但是如果使用多繼承,會涉及到查詢順序(mro)、重複呼叫(鑽石繼承)等種種問題。

mro 就是類的方法解析順序表, 其實也就是繼承父類方法時的順序表。

python2.7和python3.x對於這個函式的寫法是不一樣的。我們先以2.7的寫法來理解一下這個函式。

classa(

object):

# python2.x 記得繼承 object

defadd

(self, x)

: y = x+

1print

(y)class

b(a)

:def

add(self, x)

:super

(b, self)

.add(x)

b = b(

) b.add(2)

# 3

super(b, self)要完成兩個工作:尋找類並例項化。尋找b的父類a,在b這個類中,self是b的例項,但是現在就要換成a的例項化了。

在python3中,括號中的引數也被省去了。簡化之後的版本為:

'''

'''classa(

):defadd

(self, x)

: y = x+

1print

(y)class

b(a)

:def

add(self, x)

:super()

.add(x)

b = b(

) b.add(2)

# 3

super在python中有什麼用

所屬 分類 python高階 物件導向 有什麼區別?class child somebaseclass def init self super child,self init 和 class child somebaseclass def init self somebaseclass.init s...

Ruby 的 super 怎麼用

ruby 的 super 僅用於繼承中,用來給子方法呼叫父方法。class parent def method a,b puts endendclass childa parent def method a,b super b,a endendclass childb parent def meth...

python教程(九)之特性(3 函式super)

super 呼叫這個函式時,將當前類和當前例項作為引數 對其返回的物件呼叫方法時,呼叫的是超類 例如之前的bird 而不是當前類 所以在songbird的建構函式中,可以使用super songbird,self 在python3中,super可不提供任何引數 class bird def init...