Python 函式呼叫父類詳解

2021-10-06 08:46:18 字數 1998 閱讀 6168

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

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

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

以下是 super() 方法的語法:

super(type[, object-or-type]

)

(python3.x )

classa:

defadd

(self, x)

: y = x+

1print

(y)class

b(a)

:def

add(self, x)

:super()

.add(x)

b = b(

)b.add(2)

# 3

(python2.x )

#!/usr/bin/python

# -*- coding: utf-8 -*-

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 函式的例項:

例項

#!/usr/bin/python

# -*- coding: utf-8 -*-

class

fooparent

(object):

def__init__

(self)

: self.parent =

'i\'m the parent.'

print

('parent'

)def

bar(self,message)

:print

("%s from parent"

% message)

class

foochild

(fooparent)

:def

__init__

(self)

:# super(foochild,self) 首先找到 foochild 的父類(就是類 fooparent),然後把類 foochild 的物件轉換為類 fooparent 的物件

super

(foochild,self)

.__init__(

)print

('child'

)def

bar(self,message)

:super

(foochild, self)

.bar(message)

print

('child bar fuction'

)print

(self.parent)

if __name__ ==

'__main__'

: foochild = foochild(

) foochild.bar(

'helloworld'

)

執行結果:

parent

child

helloworld from parent

child bar fuction

i'm the parent.

參考連線:

新增鏈結描述

python 子類呼叫父類函式的方法

python中的子類中的 init 函式會覆蓋父類的函式,一些情況往往需要在子類裡呼叫父類函式。如下例程裡,處是需要呼叫父類函式的地方,接下來結合例程具體介紹。1 1 coding utf 8 2 2 class student 3 3 def init self,name 4 4 self.nam...

Python 子類呼叫父類方法

python在繼承時,如果子類重寫了init 函式,則父類的init 不會被呼叫,這時如果子類只是想要對父類的init 函式進行簡單的擴充套件的話,是很不方便的。那麼有沒有比較方便的方法來從子類呼叫父類呢?第一種是直接使用父類的類名來直接呼叫。python3.3 class parent def i...

python繼承父類的呼叫

python中的乙個派生類整合多個基類時候。例項化派生類物件後呼叫方法。如下 class baserequest pass class requesthandler baserequest def process request self print requesthandler.process r...