天天看點

python子類繼承_Python子類繼承父類構造函數詳解

如果在子類中需要父類的構造方法就需要顯式地調用父類的構造方法,或者不重寫父類的構造方法。

子類不重寫 __init__,執行個體化子類時,會自動調用父類定義的 __init__。

class Father(object):

def __init__(self, name):

self.name=name

print ( "name: %s" %( self.name) )

def getName(self):

return 'Father ' + self.name

class Son(Father):

def getName(self):

return 'Son '+self.name

if __name__=='__main__':

son=Son('runoob')

print ( son.getName() )

輸出結果為:

name: runoob

Son runoob

如果重寫了__init__ 時,執行個體化子類,就不會調用父類已經定義的 __init__,文法格式如下:

class Father(object):

def __init__(self, name):

self.name=name

print ( "name: %s" %( self.name) )

def getName(self):

return 'Father ' + self.name

class Son(Father):

def __init__(self, name):

print ( "hi" )

self.name = name

def getName(self):

return 'Son '+self.name

if __name__=='__main__':

son=Son('runoob')

print ( son.getName() )

輸出結果為:

hi

Son runoob

如果重寫了__init__ 時,要繼承父類的構造方法,可以使用 super 關鍵字:

super(子類,self).__init__(參數1,參數2,....)

還有一種經典寫法:

父類名稱.__init__(self,參數1,參數2,...)

class Father(object):

def __init__(self, name):

self.name=name

print ( "name: %s" %( self.name))

def getName(self):

return 'Father ' + self.name

class Son(Father):

def __init__(self, name):

super(Son, self).__init__(name)

print ("hi")

self.name = name

def getName(self):

return 'Son '+self.name

if __name__=='__main__':

son=Son('runoob')

print ( son.getName() )

輸出結果為:

name: runoob

hi

Son runoob

時間: 2019-02-18