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...