子类方法调用父类方法 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")

那么这种情况下会调用谁的?子类重写父类,想单干,那就用子类的呗,体现了语言的良心化设计

就近原则, 子类有就调用子类的,没有就调用父类的。

results matching ""

    No results matching ""