首页 > 解决方案 > 带有 __init__ 函数的 Python 类多重继承

问题描述

我想让每个类都有不同或相同的变量,并用 final 类继承,如下所示

class a(object):
    def __init__(self, x, y):
        self.x = x
        self.y = y
    def add(self):
        return self.x + self.y

 class b(object):
    def __init__(self, u, v):
        self.u = u
        self.v = v

    def mul(self):
        return self.u*self.v

class c(a, b):
    def __init__(self,x,y,u,v,w):
        super(c,self).__init__(x,y,u,v,w)
        self.w = w

    def div(self):
        return (self.x+self.y+self.u+self.v)/self.w

错误为:

ob = c(1,2,3,4,5)
Traceback (most recent call last):

File "<ipython-input-20-0c1a3250f4a1>", line 1, in <module>
ob = c(1,2,3,4,5)

File "<ipython-input-19-5734ec980138>", line 20, in __init__
super(c,self).__init__(x,y,u,v,w)

TypeError: __init__() takes 3 positional arguments but 6 were given

如何修复错误?

标签: python-3.xclass

解决方案


我不确定这是否是一种好习惯,但您可以通过__init__()分别调用每个超类来使其工作。

class a(object):
    def __init__(self, x, y):
        self.x = x
        self.y = y
    def add(self):
        return self.x + self.y

class b(object):
    def __init__(self, u, v):
        self.u = u
        self.v = v

    def mul(self):
        return self.u*self.v

class c(a, b):
    def __init__(self,x,y,u,v,w):
        a.__init__(self, x, y)
        b.__init__(self, u, v)
        self.w = w

    def div(self):
        return (self.x+self.y+self.u+self.v)/self.w

k = c(1, 2, 3, 4, 5)

print(k.div())
>>>2.0
print(k.add())
>>>3
print(k.mul())
>>>12

推荐阅读