您的当前位置:首页正文

Python中super()的用法

2022-09-20 来源:钮旅网
Python中super()的⽤法

  Python⾥的super().__init__()有什么作⽤。

  直⽩的说super().__init__(),就是继承⽗类的init⽅法,同样可以使⽤super()+. 其他⽅法名,去继承其他⽅法  ⽰例对⽐

  先写⼀个⽗类,⽗类定义了⼀个__init__⽅法

class Person(object):

def __init__(self, name='Person'): self.name = name

  在写三个继承⾃该⽗类的⼦类

# 直接继承

class Puple(Person): pass

# 重写init⽅法

class Puple_Init(Person): def __init__(self, age): self.age = age

# 重写init⽅法但是继承了⽗类的init⽅法class Puple_Super(Person): def __init__(self, name, age):

# self.name = name self.age = age

super().__init__(name)

  第⼀个⼦类Puple直接继承

  第⼆个⼦类Puple_Init继承并写了init⽅法

  第三个⼦类Puple_Super继承并写了init⽅法,还添加了super().__init__()  分别创建三个类的对象

pp = Puple()

pp_i = Puple_Init(10)

pp_s = Puple_Super('Puple_Super',12)

  运⾏结果对⽐

  第⼀个对象可以接调⽤⽗类的name属性

print(pp.name)# Person

  第⼆个对象pp_i继承⾃⽗类,覆盖初始化def init增加属性age,不能调⽤name属性

# print(pp_i.name)

# AttributeError: 'Puple_Init' object has no attribute 'name'

  第三个对象pp_s继承⾃⽗类,覆盖初始化init,增加了定义属性age,同时继承了⽗类的init,即相当于在init⽅法⾥也包含self.name =name 所以可以调⽤name属性

print(pp_s.name)# Puple_Super

  注意:使⽤super继承⽗类的⽅法需要按照⽗类定义的函数格式去传递参数,但是不需要传递self,以本例⼦为例

# 类Puple_Super的⽗类为Person

# 使⽤以下⽅法继承⽗类的初始化__init__⽅法super().__init__(name)

# 在⽗类该初始化⽅法定义为def __init__(self, name='Person'): self.name = name

# 所以需要在继承的时候传递对应的参数name,本次不传递也不会报错

# 因为在⽗类设置了默认值Person,如果在⽗类没有设置默认值则在继承的时候⼀定要加对应的参数name

  

因篇幅问题不能全部显示,请点此查看更多更全内容