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

Python子类定义参数不同的__init__属于构造方法重写还是替换?

问题对应的代码

class A:
    a = 10
    def __init__(self, n):
        self.name = n

class B(A):
    def __init__(self, n, r):
        self.name = n
        self.roll = r

结论

你的理解本质是对的,出现认知冲突是因为不同语言语境下「重写」的定义不一样。

  • 你之前的认知应该是来自Java这类静态强类型语言的规则:这类语言要求重写(Override)必须满足方法名、参数列表、返回值类型完全匹配父类,不符合要求的不算重写,按照这个标准你说的这种情况确实不满足重写定义,叫「替换」更准确。
  • 但Python是动态类型语言,没有方法签名校验机制,只要子类定义了和父类同名的方法,不管参数是否一致,都会直接覆盖父类的同名方法实现,实例调用时只会走子类的逻辑,所以Python语境下业内普遍把这种场景也归类为构造方法重写。
  • 你提到的「替换」其实更贴合Python的实际运行逻辑:这段代码里B的__init__完全替换了继承自A的__init__,如果不在B的构造里主动调用super().__init__(),父类A的构造逻辑完全不会执行,和静态语言里严格的重写行为有明显区别。

简单说就是两种说法都没错,只是适用的语境不同,你对Python里这个行为的本质理解是对的。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 22:15:05