super.__init__作用:子类继承父类的方法和属性

先看一段代码

王怕怕升职记:父类:学校,子类:学生,教师

【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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值