在python中继承多个父类

k75qkfdt  于 2022-12-28  发布在  Python
关注(0)|答案(2)|浏览(223)

我尝试继承2个类作为子类中的父类,这2个类都具有不同的类变量class A具有a、b,而class B具有c、d、e,它们是**class AB(A,B)**的父类。现在我想创建AB类对象,但在尝试创建AB类对象时,我不明白如何传递值

class A:
    def __init__(self,a,b):
        self.a = a
        self.b = b
    def testa(self):
        print('inside A')
class B:
    def __init__(self,c,d,e):
        self.c = c
        self.d = d
        self.e = e
    def testb(self):
        print('inside B')

class AB(A,B):
    def __init__(self,*args):
        A.__init__(self,*args)
        B.__init__(self,*args)

obj = AB(1,2,3)#这是抛出错误

os8fio9y

os8fio9y1#

发生这种情况是因为您使用 *args参数调用了A和B类的__init__方法,这会导致所有参数作为单个元组传递。要解决此问题,您可以在AB类中定义__init__方法,并将变量的值作为单独的参数接受,如下所示:

class AB(A,B):
    def __init__(self, a, b, c, d, e):
        A.__init__(self, a, b)
        B.__init__(self, c, d, e)

现在你可以像这样传递值:

obj = AB(1, 2, 3, 4, 5)
qyswt5oh

qyswt5oh2#

*args将始终解包所有值。由于A只需要2个值,因此在传递3个值时将抛出错误。要将args限制为2个元素,如果要将前2个元素传递给A,请使用slicing [:2]
因此,您的ABinit应该如下所示:

class AB(A,B):
    def __init__(self, *args):
        A.__init__(self, *args[:2])
        B.__init__(self, *args)

此外,您的方法testatestb会遇到错误,因为它们缺少self,而self总是传递给示例的方法。
只需将self添加到这两个方法中即可避免TypeError

def testa(self):
        print('inside A')

相关问题