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
相关产品推荐
相关产品推荐

