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'
任何帮助将不胜感激
将
super
与 __init__
一起使用的正确方法是
__init__
,并接受任意关键字参数。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 条规则的说明。