子类方法调用父类方法 super关键字
from c12 import Person
class Student(Person):
def __init__(self, school, name, age):
# 如何在子类中将name age传给父类的构造函数
# 第1种方式调用父类方法
# Person.__init__(self,name,age)
# 第2种方式调用父类方法, 也是主流方式 super(当前类,self).__init__(arg...)
super(Student,self).__init__(name,age)
self.school = school
def do_homework(self):
print("do english homework")
s1 = Student("北京大学","张三",12)
# 1. 通过实例/对象调用方法
s1.do_homework()
# 2. 通过类调用方法(显得有点多此一举)
Student.do_homework(s1)
'''
这里必须传入调用者self, 否则报错
TypeError: do_homework() missing 1 required positional argument: 'self'
'''
# 其实这里的s1可以随便传 Student.do_homework('') 一样的效果
# 是不是很尴尬??
print(s1.getName())
print(s1.getAge())
值得注意的是super()在类中任何方法体中都可以用,比如这里的 do_homework()
子类方法和父类方法同名
比如子类和父类都有方法:
def do_homework(self):
print("do english homework")
那么这种情况下会调用谁的?子类重写父类,想单干,那就用子类的呗,体现了语言的良心化设计
就近原则, 子类有就调用子类的,没有就调用父类的。