1、在子類中需要父類的構造方法就需要調用父類的構造方法,或者不重寫父類的構造方法。
子類不重寫 init,實例化子類時,會自動調用父類定義的 init。
class Father(object): # 所有的父類都默認繼承object類,可寫可不寫https://blog.csdn.net/txnuli/article/details/110862361
def __init__(self, name):
self.name = name # self指的是自身,這裡的self就是類自身,self.name就是類裡的變量,是Father所有。
print(f"name:{
self.name}")
def getName(self):
return 'Father ' + self.name
class Son(Father):
def getName(self):
return 'Son ' + self.name
if __name__ == '__main__':
son = Son('yaya')
print(son.getName())
輸出結果為:
name:yaya
Son yaya
2、重寫__init__ 時,實例化子類,就不會調用父類已經定義的 init,
語法格式如下:
class Father(object):
def __init__(self, name):
self.name = name # self指的是自身,這裡的self就是類自身,self.name就是類裡的變量,是Father所有。
print(f"name:{
self.name}")
def getName(self):
return 'Father ' + self.name
class Son(Father):
def __init__(self, name):
self.name = name
print('hi')
def getName(self):
return 'Son ' + self.name
if __name__ == '__main__':
son = Son('yaya')
print(son.getName())
輸出結果為:
hi
Son yaya
3、重寫__init__ 時,要繼承父類的構造方法,可以使用 super 關鍵字:
super(子類,self).__init__(參數1,參數2,....)
或
父類名稱.__init__(self,參數1,參數2,...)
class Father(object):
def __init__(self, name):
self.name = name # self指的是自身,這裡的self就是類自身,self.name就是類裡的變量,是Father所有。
print(f"name:{
self.name}")
def getName(self):
return 'Father ' + self.name
class Son(Father):
def __init__(self, name):
self.name = name
print('hi')
super().__init__(name)
def getName(self):
return 'Son ' + self.name
if __name__ == '__main__':
son = Son('yaya')
print(son.getName())
輸出結果為:
hi
name:yaya
Son yaya
總結:
一:子類調用父類的方法:子類不重寫__init__()方法,實例化子類後,會自動調用父類的__init__()的方法。
二:子類不需要自動調用父類的方法:子類重寫__init__()方法,實例化子類後,將不會自動調用父類的__init__()的方法。
三:子類重寫__init__()方法又需要調用父類的方法:使用super關鍵詞