Python中, 继承中的重写super__init__()使用场景及原因

本文解释了在Python中如何在子类的初始化方法中使用super__init__(),以确保父类状态正确初始化,避免代码重复,保持面向对象设计的正确性,并在多重继承中确保方法解析顺序的执行。
摘要由CSDN通过智能技术生成

在Python中, super__init__()的使用通常出现子类的初始化方法(__init__)中, 也就是继承中的重写

目的是调用父类的初始化方法

使用原因:

1. 确保父类状态正确初始化: 父类可能有一些必须初始化的属性和状态, 如果不调用父类的__init__方法, 这些属性可能不会被正确设置, 从而导致子类对象的状态不完整或者错误

2. 避免代码重复: 如果子类中需要添加或者修改一些初始化逻辑, 但仍然需要父类中的初始化逻辑, 那么使用super__init__()可以避免重复编写父类中已有的初始化代码

3. 多重继承中的正确性: 在多重继承的情况下, super() 确保了方法解析顺序(MRO)的正确性, 每个父类的__init__() 方法只会被调用一次, 按照MRO顺序

4. 符合面向对象设计原理: 使用super__init__() 符合面向对象设计中的封装和继承原则, 子类通过继承父类来复用代码, 并使用super() 来确保父类中的行为得到正确的调用

class Parent:  
    def __init__(self):  
        self.parent_attribute = "I'm from Parent"  
  
class Child(Parent):  
    def __init__(self):  
        super().__init__()  # 调用父类的__init__方法  
        self.child_attribute = "I'm from Child"  
  
# 创建Child类的实例  
c = Child()  
  
# 访问父类和子类的属性  
print(c.parent_attribute)  # 输出: I'm from Parent  
print(c.child_attribute)  # 输出: I'm from Child

在这个例子中,Child类继承了Parent类。Child类的__init__方法使用super().__init__()来调用Parent类的__init__方法,确保parent_attribute被正确初始化。然后,它添加了自己的初始化逻辑来设置child_attribute

如果不使用super().__init__(),那么parent_attribute将不会被初始化,尝试访问它会导致一个AttributeError。使用super().__init__()确保了父类的初始化逻辑得到执行,使得子类可以正确地扩展父类的功能。

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值