类型错误:Child2.__init__() 缺少 1 个必需的位置参数:'c'

问题描述 投票:0回答:1
class Parent:
    def __init__(self, a):
        self.a = a


class Child1(Parent):
    def __init__(self, a, b):
        super().__init__(a)
        self.b = b


class Child2(Parent):
    def __init__(self, a, c):
        super().__init__(a)
        self.c = c


class GrandChild(Child1, Child2):
    def __init__(self, a, b, c):
        Child1.__init__(self, a, b)
        Child2.__init__(self, a, c)

    def addition(self):
        return self.a + self.b + self.c


res = GrandChild(1, 2, 3)
res.addition()

我正在尝试使用混合继承和编译器显示来添加 3 个数字

TypeError:Child2.init() 缺少 1 个必需的位置参数:'c'

任何帮助将不胜感激

python oop inheritance addition hybrid
1个回答
0
投票

super
__init__
一起使用的正确方法是

  1. 实例化类时使用关键字参数。
  2. 仅使用您需要直接使用的参数定义
    __init__
    ,并接受任意关键字参数。
  3. Always 调用
    super().__init__
    once,传递任何您不知道如何处理的关键字参数。
class Parent:
    def __init__(self, *, a, **kwargs):
        super().__init__(**kwargs)
        self.a = a


class Child1(Parent):
    def __init__(self, *, b, **kwargs):
        super().__init__(**kwargs)
        self.b = b


class Child2(Parent):
    def __init__(self, *, c, **kwargs):
        super().__init__(**kwargs)
        self.c = c


class GrandChild(Child1, Child2):
    # __init__ doesn't even need to be overriden here.

    def addition(self):
        return self.a + self.b + self.c

res = GrandChild(a=1, b=2, c=3)

请参阅 https://rhettinger.wordpress.com/2011/05/26/super-considered-super/ 了解上面列出的 3 条规则的说明。

© www.soinside.com 2019 - 2024. All rights reserved.