假设我有
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__
?