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

🎬 秋野酱:《个人主页》
🔥 个人专栏:《Java专栏》《Python专栏》
⛺️心若有所向往,何惧道阻且长

在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()确保了父类的初始化逻辑得到执行,使得子类可以正确地扩展父类的功能。

  • 10
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
__new__和__init__是Python的两个特殊方法。 __new__方法在一个对象实例化时调用,返回一个新创建的实例对象。它是一个类级别的方法,并且在实例化之前被调用。__new__方法通常用于控制对象的创建过程,可以自定义对象的创建方式。 __init__方法在对象实例化后调用,用于初始化对象的属性。它是一个实例级别的方法,并且在__new__方法之后被调用。__init__方法用于设置对象的初始状态,可以对属性进行赋值或执行其他初始化操作。 通常情况下,我们会在__new__方法创建对象,并在__init__方法对对象进行初始化。但是也可以只使用的一个方法,根据具体需求来决定是否需要自定义对象的创建过程或初始化操作。 下面是一个示例代码,演示了__new__和__init__方法的使用: ```python class MyClass: def __new__(cls, *args, **kwargs): instance = super().__new__(cls) # 自定义对象创建过程 # 可以在这里进行一些额外的操作 return instance def __init__(self, *args, **kwargs): # 对象初始化操作 # 可以在这里对属性进行赋值 pass # 创建对象 obj = MyClass() ``` 在这个示例,我们重写了MyClass类的__new__方法和__init__方法。在__new__方法,我们使用了super()来调用父类的__new__方法,获得一个新的实例对象。在__init__方法,我们可以对对象进行初始化操作。最后,通过实例化MyClass类来创建对象obj。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

秋野酱

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值