在学习了上述教程后,学到了子类调用父类的方法方式
使用 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 = lastname
def 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