先看一段代码
王怕怕升职记:父类:学校,子类:学生,教师
【super作用】
子类继承父类的方法和属性
1 如果子类(student)继承父类(school)不做初始化,那么会自动继承父类(school)属性name,sex,age
例如:
class School(object):
def __init__(self, name, sex, age): # 定义构造函数 传入3个参数
self.name = name # 构造3个属性
self.sex = sex
self.age = age
class Student(School): # 定义子类
def print_info(self): # 直接定义方法函数,继承父类属性 。未定义构造函数
print("{}\t{}\t{}".format(self.name, self.sex, self.age))
s = Student("刘德华", "男", "18")
s.print_info()
>>>
刘德华 男 18
2 如果子类(student)继承父类(school)做了初始化,且不调用super初始化父类构造函数,那么子类(student)不会自动继承父类的属性(name,sex,age),但可以继承父类的方法。
class School(object):
def __init__(self, name, sex, age): # 定义父类构造函数
self.name = name
self.sex = sex
self.age = age
def grades(self,g): # 定义父类方法函数
if g >= 90:
print("优秀")
if g >=60 and g < 90:
print("合格")
else:
print("不合格")
class Student(School):
def __init__(self, hobby,weight,height): # **不自动继承**,可以自己定义子类构造方法 这里定义了,爱好,身高,体重
self.hobby = hobby
self.weight = weight
self.height = height
def nfo(self):
print("{}\t{}\t{}".format(self.hobby, self.weight, self.height))
s = Student("篮球", "180", "185")
s.info()
s.grades(85) # 继承了父类方法,所以可以用子类对象直接调用父类方法
>>>
刘德华 男 18
合格
3 如果子类(student)继承父类(school)做了初始化,且调用了super初始化了父类的构造函数,那么子类(student)也会继承父类的(school)属性。
例如:
class School(object):
def __init__(self, name, sex, age):
self.name = name
self.sex = sex
self.age = age
def grades(self,g):
if g >= 90:
print("优秀")
if g >=60 and g < 90:
print("合格")
else:
print("不合格")
class Student(School):
def __init__(self, name, sex, age, class_no, s_no):
super(Student, self).__init__(name, sex, age) # 调用super 关键
self.class_no = class_no
self.s_no = s_no
def print_info(self):
print("{}\t{}\t{}\t{}\t{}".format(self.name, self.sex, self.age, self.class_no, self.s_no))
s = Student("刘德华", "男", "18", "高三一班", "15")
s.print_info()
s.grades(85) # 继承了父类方法,所以可以用子类对象直接调用父类方法
>>>
刘德华 男 18 高三一班 15
合格
python中super的用法的学习需要和构造函数对比才能通透
可以复制到自己代码中跑一跑
点赞+收藏
–by Edwin