__init__多重继承中的调用

时间:2020-02-03 16:12:23

标签: python

假设我有

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

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

我想构造一个类C,该类从这两个类继承,并添加一个名为c的额外属性。 做到这一点的最佳方法是什么?

显式表单:

class C(A,B):

    def __init__(self, a, b, c):
        self.c = c
        A.__init__(self, a)
        B.__init__(self, b)

隐式或合作形式:

此表单涉及调用super方法,我们需要修改父类。

class A:
    def __init__(self, a, **kwargs):
        super().__init__(**kwargs)
        self.a = a

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


class C(A,B):

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

由于MRO,当我在super中调用C时,它将调用A __init__,并且由于MRO的缘故,super方法A __init__中的名称将调用B __init__

我不喜欢这种继承方式,因为您必须谨慎使用kwargs,并且我认为当父类超过两个时,它将变得更加复杂。

实际上,什么是最好的方法?也许是一种好习惯,不要叫倍数__init__

0 个答案:

没有答案