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

Python 3 OOP多继承方法报错原因分析及解决咨询

多继承Python代码错误分析与解决办法

错误1:调用U1.Proc1(7)报错unsupported operand type(s) for *: 'Child0' and 'int'

原因

子类Child0的构造方法里,super().__init__(self)写法完全错误。super()调用父类构造时,不需要手动传self,而且应该传入父类P1需要的Q1参数。现在传成self导致P1的Q1被赋值为Child0对象本身,执行self.Q1 * self.I1时就是拿对象乘整数,触发类型错误。

解决办法

把super().__init__(self)改成super().__init__(Q1),让P1的构造方法正确接收初始化参数,给Q1赋值为传入的数值。


错误2:调用U1.Proc2(8)报错'Child0' object has no attribute 'Q2'

原因

Python多继承中,super()默认只调用继承顺序里第一个父类(这里是P1)的构造方法,不会自动触发第二个父类P2的构造。而你把P2.__init__(self, Q2)注释掉了,导致Child0对象根本没有初始化Q2属性,调用Proc2时访问self.Q2自然找不到。

解决办法

取消P2.__init__(self, Q2)的注释,显式调用P2的构造方法,确保Q2属性被正确初始化。


错误3:调用U1.Combine(7,8)报错'int' object has no attribute 'I1'

原因

  • 直接用P1.Proc1(B1,12)调用方法时,相当于把P1类作为调用主体,此时方法的第一个参数self被传入了整数B1(也就是9),而不是Child0对象。Proc1里试图访问self.I1,但整数没有这个属性,直接报错。
  • 另外Proc1和Proc2原本没有返回值,就算调用正确,用它们的返回结果(默认是None)做除法也会报错。

解决办法

  1. 调用父类方法时,要以子类对象作为self,可以写成self.Proc1(B1)或者P1.Proc1(self, B1);
  2. 给Proc1和Proc2添加返回值,把计算好的R1和R2返回,这样才能进行除法运算。

修正后的完整代码

class P1:
    def __init__(self, Q1):
        self.Q1 = Q1

    def Proc1(self, I1):
        self.I1 = I1
        R1 = self.Q1 * self.I1
        self.R1 = R1
        print("Result from Parent 1:", R1)
        return R1  # 添加返回值

class P2:
    def __init__(self, Q2):
        self.Q2 = Q2

    def Proc2(self, I2):
        self.I2 = I2
        R2 = self.Q2 + self.I2
        self.R2 = R2
        print("Result from Parent 2:", R2)
        return R2  # 添加返回值

class Child0(P1, P2):
    def __init__(self, Q1, Q2):
        super().__init__(Q1)  # 修正super调用参数
        P2.__init__(self, Q2)  # 初始化P2的属性
    
    def Combine(self, A1, A2):
        B1 = 9
        B2 = 10
        # 用子类对象调用父类方法,获取返回值后计算
        res1 = self.Proc1(B1)
        res2 = self.Proc2(B2)
        print("Combined result:", res1 / res2)

U1 = Child0(6, 10)
# 现在可以正常执行以下调用
U1.Proc1(7)
U1.Proc2(8)
U1.Combine(7,8)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 05:15:25