Python 2.7初始化多个继承器
我正在尝试运行下面的代码,我希望Python 2.7初始化多个继承器,python,class,python-2.7,inheritance,initialization,Python,Class,Python 2.7,Inheritance,Initialization,我正在尝试运行下面的代码,我希望C以整洁和动态的方式初始化A和B(可能更多) class A(object): def __init__(self): print 'Class A init' class B(object): def __init__(self): print 'Class B init' class C(A, B): def __init__(self): super(C, self).__init_
C
以整洁和动态的方式初始化A
和B
(可能更多)
class A(object):
def __init__(self):
print 'Class A init'
class B(object):
def __init__(self):
print 'Class B init'
class C(A, B):
def __init__(self):
super(C, self).__init__()
print 'Class C init'
c = C()
然而,这只是一种产出
Class A init
Class C init
我知道这是由于调用super(…)时采用了深度优先的搜索方式,并且在找到第一个方法时停止。我能以某种方式初始化所有的超类吗
class C(A, B):
def __init__(self):
A.__init__(self)
B.__init__(self)
print 'Class C init'
编辑:
如下定义C
可以实现初始化所有超类的目标。有没有一种方法可以隐式初始化所有的超类
class C(A, B):
def __init__(self):
A.__init__(self)
B.__init__(self)
print 'Class C init'
解决方案:正如a
super(B,self)所指出的那样。B
类中添加了B
为什么不调用super(B,self)。B
中的?想不出一个设计,你真的想让C
同时做这两件事…重复的B
不会继承a
@JonClements:我同意你的观点。成功了。我不知道。这是一种非常糟糕的继承方式。为什么不为你想要的行为使用mixin呢?