如果在子类需要父类的构造方法就需要显示地调用父类的构造方法,或者不重写的构造方法。
类型1:如果子类没有重写__init__,子类会自动调用__init__
class F:
def __init__(self, name):
self.name = name
print('name:'+self.name)
def getName(self):
return 'F:' + self.name
class S(F):
def getName(self):
return 'S:' + self.name
if __name__ == '__main__':
s = S('sun')
print(s.getName())
运行结果:
类型2:如果重写__init__,实例化子类,就不会调用父类的__init__方法
class F:
def __init__(self, name):
self.name = name
print('name:'+self.name)
def getName(self):
return 'F:' + self.name
class S(F):
def __init__(self, name):
self.name = name
print('Sname:'+self.name)
def getName(self):
return 'S:' + self.name
if __name__ == '__main__':
s = S('sun')
print(s.getName())
运行结果:
类型3:子类重写__init__,就要继承父类的构造方法,可以使用super关键字
class F:
def __init__(self, name):
self.name = name
print('Fname:'+self.name)
def getName(self):
return 'F:' + self.name
class S(F):
def __init__(self, name):
super(S,self).__init__(name)
self.name = name
print('Sname:'+self.name)
def getName(self):
return 'S:' + self.name
if __name__ == '__main__':
s = S('sun')
print(s.getName())
运行结果: