You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

子类是否必须定义构造函数?为何部分子类无需调用super().__init__()?

Python子类构造函数常见疑问解答

子类是否必须拥有构造函数/初始化器?

答案是完全不需要。Python的继承机制做了很贴心的自动处理,如果你不给子类定义__init__方法,解释器会自动调用父类的构造函数来完成实例的初始化工作,根本不用你手动写。

为什么示例中的Child子类无需调用super().__init__()?

咱们看这个具体的例子:

class Parent(object):
    def __init__(self):
        self.value = 5
    def get_value(self):
        return self.value
class Child(Parent):
    pass

因为Child没有定义自己的__init__方法,Python会按照**方法解析顺序(MRO)**自动往上查找,找到父类Parent的__init__并执行它。所以当你创建Child()实例的时候,Parent的__init__已经被悄悄调用了,self.value也被正确设置成5,自然不用你手动写super().__init__()。

那什么时候必须手动调用呢?只有当你给子类定义了自己的__init__方法的时候,Python就不会自动触发父类的构造函数了。这时候如果你需要复用父类的初始化逻辑(比如初始化父类里的属性),就必须显式调用super().__init__(),否则父类的属性不会被初始化,后续使用时很可能报错。比如你第一个例子里的GoodBoss,它自己写了__init__,所以必须调用super来让Boss的构造函数执行,才能把name、attitude这些属性初始化好。

内容的提问来源于stack exchange,提问作者piccolo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:07:51