关于python类的super和multinherit

2024-04-26 14:26:50 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用python3.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的打印?你知道吗


Tags: 代码selfchildinitmaindefclasspp
1条回答
网友
1楼 · 发布于 2024-04-26 14:26:50

Python不会自动调用__init__Parent。您必须在PP中用super().__init__()显式地执行此操作:

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()

现在输出为:

init child
init PP
init parent

相关问题 更多 >