Python 子类继承父类构造函数说明 | 菜鸟教程如果在子类中需要父类的构造方法就需要显式地调用父类的构造方法,或者不重写父类的构造方法。 子类不重写 __init__,实例化子类时,会自动调用父类定义的 __init__。 实例 [mycode3 type='python'] class Father(object): def __init__(self, name): self.name=name print (..https://www.runoob.com/w3cnote/python-extends-init.html
在学习了上述教程后,学到了子类调用父类的方法方式
使用 super 关键字:super(子类,self).__init__(参数1,参数2,....)使用经典写法:父类名称.__init__(self,参数1,参数2,...)
但学习的时候,脑海里有一个奇怪的想法,self 不是也可以调用父类的方法吗 ?
先说一下自己的结论:
父类有A方法,子类重写A方法,不能通过self.A()方法调用父类A方法,需要通过教程中的方式
self
self 分析一下情况:
- 子类___init__() 调用 self.___init__()
- 子类a() 调用 self.a()
- 子类a() 调用 self.b()
情况 1: 子类___init__() 调用 self.___init__()
class student(people):grade = ''def __init__(self, n, a, w, g):# 调用父类的构函self.__init__(self, n, a, w)self.grade = g
看了这个代码,不用运行就知道 self.___init__() 调不到父类的构造函数 ,所以不可行
情况 2:子类a() 调用 self.a()
不用看代码 ,同情况 1
情况 3:子类a() 调用 self.b()
class Parent:def __init__(self, lastname):self.lastname = lastnamedef b(self):print('Parent b')class Son(Parent):def __init__(self, lastname):super().__init__(lastname)def a(self):self.b()Son("liu").a()
运行后没有问题
super()
super() 分析一下情况:
- 子类___init__() 调用 super().___init__()
- 子类a() 调用 super().a()
- 子类a() 调用 super().b()
情况 1: 子类___init__() 调用 super().___init__()
这种情况就是菜鸟教程中的,没有问题
情况 2:子类a() 调用 self.a()
class Parent:def a(self):print('Parent a')class Son(Parent):def a(self):print('son a')super().a()Son().a()
运行结果:
son a
Parent a
情况 3: 子类a() 调用 super().b()
class Parent:def b(self):print('Parent b')class Son(Parent):def a(self):print('son a')super().b()Son().a()
运行结果:
son a
Parent b