在python中我有3个类a,B,c。类c是a,b的子类。现在当我创建类c的对象时,只有类c的构造函数被调用。我希望类a,b的构造函数也被调用。
class a:
def __init__(self):
print("initializing a")
class b:
def __init__(self):
print("initializing b")
class c(a,b):
def __init__(self):
print("initializing c")
e=c()
我得到了这个结果
初始化c
我还以为
初始化
初始化B
初始化c
3条答案
按热度按时间pgx2nnw81#
在Python中,当你定义一个继承自多个父类的子类时,只有子类定义中列出的第一个父类的构造函数会被自动调用。这是因为,在Python中,方法解析顺序(MRO)决定了父类构造函数的调用顺序。
在你的例子中,由于在c的定义中a列在b之前,所以只调用a的构造函数,而不调用b的构造函数。要调用b的构造函数,可以使用super()函数从c的构造函数显式调用它,如下所示:
这里,super().init()调用a的构造函数,B.init(self)调用b的构造函数。这将输出预期结果:
mnowg1ta2#
我认为你搜索的是Multiple Inheritance,所以你必须使用
super().__init__()
[仅适用于python 3],就像这个例子[适用于python 2和3]:输出:
关于super()的一个很好的描述,你会发现here。* 顺便说一下,PEP 8:类名通常应使用CapWords或CamelCase约定 *。
nxowjjhe3#
你必须用super()调用其他类的构造函数。我也认为一个类只能扩展一个类。
现在它在创建e时调用每个构造函数。