python - 子类为什么调用父类的方法
菜鸟教程 - 面向对象https://www.runoob.com/python3/python3-class.html为什么写这个呢 ,因为很多时候,事情很简单,但我往往记住了使用方式,忘记了使用原因,也因为自己看到super()时,也想问为什么要用super()
菜鸟教程中有一个继承例子
#!/usr/bin/python3#类定义
class people:#定义基本属性name = ''age = 0#定义私有属性,私有属性在类外部无法直接进行访问__weight = 0#定义构造方法def __init__(self,n,a,w):self.name = nself.age = aself.__weight = wdef speak(self):print("%s 说: 我 %d 岁。" %(self.name,self.age))#单继承示例
class student(people):grade = ''def __init__(self,n,a,w,g):#调用父类的构函people.__init__(self,n,a,w)self.grade = g#覆写父类的方法def speak(self):print("%s 说: 我 %d 岁了,我在读 %d 年级"%(self.name,self.age,self.grade))s = student('ken',10,60,3)
s.speak()
people.__init__(self,n,a,w) 调用父类的构造函数,此时我的问题是能不能这么写
class student(people):def __init__(self, n, a, w, g):self.name = nself.age = aself.__weight = wself.grade = g# 覆写父类的方法def speak(self):print("%s 说: 我 %d 岁了,我在读 %d 年级" % (self.name, self.age, self.grade))
这两种写法,运行结果没区别,那为什么要使用 people.__init__(self,n,a,w) 这种写法
回顾一下继承的作用
继承允许一个类(称为子类或派生类)从另一个类(称为父类或基类)继承属性和方法。这样可以重用代码,提高代码的模块化和可维护性。
结论:
1. 重用代码意味着子类不需要与父类的属性重复,因此Student 构造函数只需写self.grade = g,那么问题来了,怎么初始化父类的方法,于是有了 people.__init__(self,n,a,w) 调用了父类的构造函数,而且减少了代码,提高模块化
2. 为什么不用第二种方式,因为子类重复定义属性
问题
当然这么使用引发了其他问题,比如 多继承问题