关于python类的超级和多继承

时间:2018-02-17 12:39:25

标签: python class multiple-inheritance

我使用Python 3.6.3

我有以下代码:

class Parent:
    def __init__(self, **kw):
        print("init parent")

class PP:
    def __init__(self, **kw):
        print("init PP")


class Child(PP, Parent):
    def __init__(self, **kw):
        print("init child")
        super().__init__()

exp=Child()

我期待:

init child
init PP
init parent

但我得到了:

init child
init PP

当我尝试打印MRO时,我得到了正确答案。

print(exp.__class__.mro())

[<class '__main__.Child'>, <class '__main__.PP'>, <class '__main__.Parent'>, <class 'object'>]

为什么没有parent的打印?

1 个答案:

答案 0 :(得分:0)

Python不会自动调用__init__的{​​{1}}。您必须使用Parent中的super().__init__()明确地执行此操作:

PP

现在输出是:

class Parent:
    def __init__(self, **kw):
        print("init parent")

class PP:
    def __init__(self, **kw):
        print("init PP")
        super().__init__()


class Child(PP, Parent):
    def __init__(self, **kw):
        print("init child")
        super().__init__()

exp = Child()