我正在尝试通过自创示例了解 Python 3 OOPS 中方法的多重继承,但出现各种错误

I am trying to understand Multiple Inheritance of methods in Python 3 OOPS through a self-created example, but am getting various errors

提问人:Abi 提问时间:4/11/2023 更新时间:4/11/2023 访问量:20

问:

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)

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)

class Child0 (P1, P2):
    def __init__ (self, Q1, Q2):
        super().__init__ (self)
        #P2.__init__ (self, Q2)
    
    def Combine (self, A1, A2):
        B1 = 9
        B2 = 10
        print ("Combined result:", P1.Proc1(B1,12) / P2.Proc2(B2, 14))

U1 = Child0 (6, 10)

#U1。程序1(7) #error msg - *: 'Child0' 和 'int' 不支持的操作数类型

#U1。程序2(8) #error msg -'Child0' 对象在注释掉上述行时没有属性“Q2”

#U1。联合收割机(7,8) #error msg -'int' 对象在 U1 时没有属性“I1”。Proc1 和 U1。Proc2 被注释掉

''' 我创建了两个父类,每个类中都有一个方法。然后,我创建了一个 Child 类,该类应继承父类的每个方法,以在子级别创建一个新方法。我可以独立调用父类的方法,但不能通过启动子类的对象来调用子类的方法或父类的方法。

我想了解这 3 个错误中的每一个以及如何摆脱它们 '''

OOP 继承 方法

评论


答:

0赞 Sobigen 4/11/2023 #1

我不认为你初始化正确。您将作为变量传递给其他方法之一(我认为是 P1)。Child0self__init__

试试这个

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

评论

0赞 Abi 4/11/2023
Sobigen - 由于您的建议,我现在可以运行 U1。Proc(1 参数) 和 U1.Proc2(1 参数),但最后一行 U1。合。。。仍然显示相同的错误。
0赞 Sobigen 4/11/2023
在 Proc1 和 Proc2 中,您为 Proc1 和 Proc2 提供了两个参数,但在定义中它只接受一个参数。你不会直接通过。从内部,你可以调用 这将比调用 P1 更合乎逻辑(至少对我来说是这样)。过程 1 中。我不知道你想让 A1、A2、B1 或 B2 去哪里。CombineselfCombineself.Proc1(argument)
0赞 Abi 4/12/2023
Sobigen - 我将 Combine 调用更改为以下内容:print (“Combined result:”, P1.Proc1(自身,B1)/P2。Proc2(自身,B2)) ...所以现在我正在传递正确数量的参数进行组合。它正确调用 Proc1 和 Proc2,但是在调用 Combine 时出现错误,如下所示:/: 'NoneType' 和 'NoneType' 不支持操作数类型
0赞 Sobigen 4/12/2023
您不会从 Proc1 或 Proc2 返回任何内容。只需打印结果即可。
0赞 Abi 4/12/2023
我明白你在暗示什么......我将 print 语句更改为 return 语句,现在正在生成结果。感谢您的指导。