python類的繼承中初始化及函式呼叫的注意事項

2021-09-22 12:44:36 字數 1373 閱讀 5115

直接上**,如下。

class father(object):

def __init__(self, names):

self.names=names

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

def getname(self):

return 'father ' + self.names

class son(father):

def __init__(self, name):

#super().__init__(name)

print ( "hi" )

self.name = name

def getnames(self):

return 'son '+self.name

if __name__=='__main__':

son=son('runoob')

print ( son.getname() )

上面的**會報錯。

這是因為兩個類都沒names這個變數,但子類的建構函式,即初始化函式,即例項化函式__init__中有新建乙個成員變數name,所以使用name沒問題而names有問題。

如果father類的getname函式中反回的是self.name而不是self.names,則沒有問題。這說明父類的函式被繼承到了子類,這個函式可以訪問子類的變數。也說明子類例項化的時候沒有呼叫父類的例項化函式__init__。

但下面的**可以正常執行。

class father(object):

names='中國'

def __init__(self, names):

self.names=names

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

def getname(self):

return 'father ' + self.names

class son(father):

def __init__(self, name):

#super().__init__(name)

print ( "hi" )

self.name = name

def getnames(self):

return 'son '+self.name

if __name__=='__main__':

son=son('runoob')

print ( son.getname() )

這是因為,雖然沒有執行父類的建構函式__init__,但有這個names變數,所以可以正常執行。

獨孤尚良dugushangliang——著

繼承類的初始化

執行時,先訪問main函式。載入器開始啟動並找出該類的編譯 載入時,由於extends知道有乙個基類,於是載入基類。如果基類仍舊有基類,那麼再載入。直到所有的基類載入完畢。很重要的一點是static方法是在載入類的時候就被執行了,而static域也在此時也會在此時進行初始化。所有的類載入完畢。開始建...

c 中成員物件初始化和類繼承初始化

對於繼承的物件,建構函式在成員初始化列表中使用類名來呼叫特定的基類建構函式。對於成員物件,建構函式則使用成員名。例如 ifndef h frabjous define h frabjous include class frabjous virtual void tell gloam gloam in...

類的繼承和類的初始化

父類 子類 class a para1 para def init self,name,name1 self.name name self.name1 name1 def function1 self print function1 def functon2 self print function2...