直接上**,如下。
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...