python继承的时候,要重写父类构造函数的原因
class Bird:
def __init__(self):
self.hungry = True
def eat(self):
if self.hungry:
print('我饿了')
else:
print('不饿,谢谢')
class SongBird(Bird):
def __init__(self):
self.sound = 'Aaaaaaaae'
def sing(self):
print(self.sound)
if __name__ == '__main__':
sb = SongBird()
sb.sing()
sb.eat()
在子类继承的时候,构造函数被重写,但是重写的时候没有任何初始化父类属性hungry的代码。这样就导致了错误发生
如果为了达到目的,需要调用父类的构造函数来保证基本的初始化。
而在子类中调用父类构造函数方法:
如果父类中的构造函数为:__init__(self, student_name, student_age)
那么子类中如下:
1、直接使用父类调用父类构造函数:class.__init__(self)--->Person.__init__(self, student_name, student_age)
2、使用super() ---->super(Student, self).__init__(student_name, student_age)
---->super().__init__(student_name, student_age)