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

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

Barbara Streisand
发布: 2024-12-20 17:35:20
原创
861 人浏览过

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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板