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

Python子类中super().__init__()调用顺序与属性初始化问题

为什么调换super().__init__()与self.cond初始化顺序会抛出AttributeError?

异常触发的核心原因

  1. 当你在子类MaquinaCha的构造方法中先调用super().__init__()时,父类MaquinaBebida的__init__方法会立即执行,而父类__init__里调用了self.adicionarComplemento()。
  2. 由于Python的多态特性,此时self是MaquinaCha的实例对象,因此实际执行的是子类MaquinaCha重写后的adicionarComplemento方法。
  3. 但此时self.cond还未被赋值(赋值语句self.cond = cond在super().__init__()之后),所以子类方法中访问self.cond会直接抛出AttributeError: 'MaquinaCha' object has no attribute 'cond'。

为什么super().__init__()之后的语句不执行?

Python中,异常会直接中断当前代码的执行流程。当super().__init__()内部调用方法触发异常后,程序会立即退出当前的__init__构造方法,后续的self.cond = cond以及其他语句自然不会被执行。

正确顺序能运行的原因

在可正常运行的代码中,你先初始化了self.cond,再调用super().__init__()。此时父类__init__调用adicionarComplemento时,self.cond已经存在,子类方法可以正常访问该属性,不会触发异常,后续流程也能顺利完成。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 15:41:12