首页 >后端开发 >Python教程 >Python的`super()`如何解决多重继承中的方法调用?

Python的`super()`如何解决多重继承中的方法调用?

Barbara Streisand
Barbara Streisand原创
2024-12-20 17:35:20895浏览

How Does Python's `super()` Resolve Method Calls in Multiple Inheritance?

多重继承如何影响 Python super() 的行为

Python 中的多重继承引入了方法解析的复杂性。 Python 确定方法解析顺序 (MRO) 来确定 super() 应该调用哪个父方法。

在您的示例中,Third 继承自 First 和 Second。当在 Third.__init__() 中调用 super().__init__() 时,它会引用 First.__init__(),因为 MRO 从左到右评估父类。在继承链中,First 列在 Second 之前。

Python 在构造 MRO 时优先考虑继承列表中的类顺序。因此,在下面的示例中,MRO 是 [Fourth, Second, Third, First, object]:

class First(object):
    def __init__(self):
        print("first")

class Second(First):
    def __init__(self):
        print("second")

class Third(First):
    def __init__(self):
        print("third")

class Fourth(Second, Third):
    def __init__(self):
        super(Fourth, self).__init__()
        print("that's it")

在这种情况下,Fourth 将调用 First.__init__() 而不是 Second.__init__()因为在MRO中首先遇到First。

但是,如果继承顺序是反转:

class Third(Second, First):
    def __init__(self):
        print("third")

然后,MRO 变成 [Third, Second, First, object],Third 最初会调用 Second.__init__()。

值得注意的是,Python 强制执行连贯的 MRO 。如果继承链中存在不一致,则会引发异常以防止意外行为。

以上是Python的`super()`如何解决多重继承中的方法调用?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn