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

Python使用super()继承时无法获取父类__init__变量问题求解

报错根因

你在子类inherit中重写了__init__构造方法,但没有手动调用父类的__init__方法,导致父类构造方法中定义的实例变量self.var没有被初始化,调用父类add方法时访问不存在的self.var就会触发属性错误。

解决方法

在子类__init__方法的最开始,通过super()调用父类的构造方法即可,修正后的代码如下:

class base():
    def __init__(self):
        self.var = 10
        
    def add(self, num):
        res = self.var+num
        return res
    
class inherit(base):
    def __init__(self, num=10):
        # 手动调用父类构造方法,完成父类属性初始化
        super().__init__()
        x = super().add(num)
        # 将计算结果存为实例属性,方便后续访问
        self.x = x

a = inherit()
print(a.x) # 输出结果为20

补充说明

  • Python不会自动执行重写后的父类构造方法,所有需要继承父类实例属性的场景,都需要在子类构造中主动调用super().__init__(),如果父类构造需要传参,也要对应传入参数。
  • 你原有代码中print(a)只会输出实例对象的内存地址,如果需要输出计算结果,需要把局部变量x存为实例属性之后再打印。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 13:51:02