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

Python多继承中__init__无报错、display()报错的原因探究

问题解答

Python的object类是否包含__init__()?

是的,Python的object类自带__init__()方法,但它是一个空实现——方法内部没有任何逻辑,仅接收self参数,调用后不会产生任何副作用。

为什么代码一无报错而代码二报错?

结合方法解析顺序(MRO)来分析两者的执行逻辑:

代码一的执行流程

代码一中类C的MRO是[C, A, B, object]:

  1. 创建C实例时,先执行C.__init__(),打印c后调用super().__init__(),此时super()指向类A;
  2. 执行A.__init__(),打印a后调用super().__init__(),此时super()指向类B;
  3. 执行B.__init__(),打印b后调用super().__init__(),此时super()指向object;
  4. 调用object.__init__(),由于该方法存在且是合法的空实现,流程正常结束,不会报错。

代码二的执行流程

代码二中类C的MRO同样是[C, A, B, object]:

  1. 调用C.display(),打印c后调用super().display(),指向类A;
  2. 执行A.display(),打印a后调用super().display(),指向类B;
  3. 执行B.display(),打印b后调用super().display(),指向object;
  4. 尝试调用object.display(),但object类根本没有定义display()方法,因此直接抛出AttributeError。

本质区别就是:object类存在__init__()方法但不存在自定义的display()方法,这导致了两段代码的执行结果不同。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 01:40:27