super().__init__()用法

当需要继承父类构造函数__init__中的内容,且父类中的参数没有默认值时,使用super().init()方法初始化父类参数

在这段代码中,New_person这个类即需要用到父类中name和age,又需要新增sex这个参数。这时就需要用到super().init()来继承父类中的name,和age。super().init()其实就是一个调用父类中__init__的函数。由于父类中的init有两个参数,所以super().init()也要传两个参数。
通过子类中的__init__函数获取到传的参数,并传给父类。

class Person():
    def __init__(self,name,age):
        self.name=name
        self.age=age
    def name1(self,name):          #定义方法名时不要和变量名一样,否则在调用的时候可能会报错。
        print('方法中名字 %s'%name)
        print('类中的名字 %s'%self.name)
    def age1(self,age):
        print('方法中的年龄 %s' %age)
        print('类中的年龄 %s' %self.age)
class New_person(Person):
    def __init__(self,new_name,new_age,sex):
        super().__init__(new_name,new_age)
        self.sex=sex
    def diaoyong(self,name,age):
        self.name1(name)
        self.age1(age)
    def sex1(self,sex):
        print('方法中的性别 %s' %sex)
        print('类中的性别 %s' %self.sex)
new_p=New_person('小绿','20','男')
new_p.diaoyong('小红','15')
new_p.sex1('女')

# 输出结果
方法中名字   小红
父类中的名字 小绿
方法中的年龄 15
父类中的年龄 20
方法中的性别 女
子类中的性别 男

当父类中的参数带有默认值时,super().init()调用父类中__init__也可以不传值,

class Person():
    def __init__(self,name = '小绿',age = '20'):
        self.name=name
        self.age=age
    def name1(self,name):          #定义方法名时不要和变量名一样,否则在调用的时候可能会报错。
        print('方法中名字 %s'%name)
        print('类中的名字 %s'%self.name)
    def age1(self,age):
        print('方法中的年龄 %s' %age)
        print('类中的年龄 %s' %self.age)
class New_person(Person):
    def __init__(self,sex):
        super().__init__()
        self.sex=sex
    def diaoyong(self,name,age):
        self.name1(name)
        self.age1(age)
    def sex1(self,sex):
        print('方法中的性别 %s' %sex)
        print('类中的性别 %s' %self.sex)
new_p=New_person('男')
new_p.diaoyong('小红','15')
new_p.sex1('女')

# 输出结果
方法中名字 小红
类中的名字 小绿
方法中的年龄 15
类中的年龄 20
方法中的性别 女
类中的性别 男

如果直接在子类重写了所需的父类参数,把super().init()这句代码去掉也可以。

class Person():
    def __init__(self,name = '小绿',age = '20'):
        self.name=name
        self.age=age
    def name1(self,name):          #定义方法名时不要和变量名一样,否则在调用的时候可能会报错。
        print('方法中名字 %s'%name)
        print('类中的名字 %s'%self.name)
    def age1(self,age):
        print('方法中的年龄 %s' %age)
        print('类中的年龄 %s' %self.age)
class New_person(Person):
    def __init__(self,sex):
        # super().__init__()
        self.name = '小绿'
        self.age = '20'
        self.sex=sex
    def diaoyong(self,name,age):
        self.name1(name)
        self.age1(age)
    def sex1(self,sex):
        print('方法中的性别 %s' %sex)
        print('类中的性别 %s' %self.sex)
new_p=New_person('男')
new_p.diaoyong('小红','15')
new_p.sex1('女')

#输出结果
方法中名字 小红
类中的名字 小绿
方法中的年龄 15
类中的年龄 20
方法中的性别 女
类中的性别 男
  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值