Python:多重继承中的共享方法和属性

Python:多重继承中的共享方法和属性,python,inheritance,Python,Inheritance,我只想创建一个从两个父级继承属性和方法的类。让我们假设两个父类是 class A(object): def __init__(self, a): self.a = a def method_a(self): return self.a + 10 class B(object): def __init__(self, b): self.b = b def method_b(self): retu

我只想创建一个从两个父级继承属性和方法的类。让我们假设两个父类是

class A(object):
    def __init__(self, a):
        self.a = a

    def method_a(self):
        return self.a + 10


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

    def method_b(self):
        return self.b + 20
然后我不知道如何创建一个子类C,它从其父类继承方法和属性。我可以做这样的事情,但我很确定这不是很像蟒蛇

class C(A, B):
    def __init__(self, a, b):
        A.__init__(self, a=a)
        B.__init__(self, b=b)
这样我就可以毫无问题地做到这一点

my_class = C(a=1, b=2)
print(my_class.a)
print(my_class.b)
print(my_class.method_a())
print(my_class.method_b())

我不知道如何设置
super
来继承来自父母双方的方法和属性,如果有任何帮助,我将不胜感激!顺便说一下:A类和B类不应该相互依赖。

据我所知,
super
的工作方式是,基于子类开头声明的超类列表,将计算出一个
mro
(方法解析顺序)列表。当您调用
super
(python3)时,将调用
mro
列表中第一个类的
\uuuu init\uuuu
。该
\uuuuu init\uuuuuu
还应包含另一个
super()
,以便
mro
中下一个类的
\uuuuuuu
也被调用

在您的情况下,
mro
列表应该是
[A,B]
。因此
A
\uuuuuu init\uuuu
必须包含对
super
的调用,以便
B
\uuuu init\uuuu
也被调用

这里的问题是:

  • 您希望
    A
    B
    不相互依赖。
    super
    的使用需要一个
    mro
    列表,正如我上面解释的,该列表不满足此要求
  • C
    \uuuu init\uuuu
    有2个参数,而
    A
    B
    的只有1个参数。您可以将
    a
    传递到
    a
    ,但我不知道是否有办法将
    b
    传递到
    b

所以在我看来,
super
在这种情况下帮不上忙。

这样的信息可以通过快速的谷歌搜索轻松找到。嘿。谢谢你的回答。我只留下了显式构造函数调用,正如上面在原始文章中定义的那样。看起来效果不错!