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

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

Mary-Kate Olsen
发布: 2024-12-27 10:33:14
原创
195 人浏览过

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

Python 多重继承中的 Super()

Python 中的多重继承带来了 super() 如何与其交互的问题。考虑下面的代码:

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

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

class Third(First, Second):
    def __init__(self):
        super(Third, self).__init__()
        print("that's it")
登录后复制

现在, super().__init__ 引用了 Third 的哪个父方法?你能选择运行哪一个吗?

为了在这种情况下理解 super(),我们深入研究方法解析顺序 (MRO) 的概念。在 Python 中,MRO 定义了涉及多重继承时解析方法的顺序。

在我们的示例中,Third() 将调用 First.__init__。 Python 从左到右检查类父类中的每个属性。对于 __init__,Python 首先在 First 中查找,如果在那里没有找到,则在 Second 中检查。

随着继承的交织,情况变得更加复杂。请阅读 Guido 关于 MRO 的博客文章了解更多相关信息。然而,Python 通常会保持所写的继承顺序,从子类本身开始。

考虑以下示例:

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")
登录后复制

这里,MRO 将是 [第四,第二,第三,第一]。

需要注意的是,如果Python无法确定一致的MRO,它会引发异常,而不是诉诸潜在的意外

此外,值得一提的是,提供的示例不使用 super() 调用。它们的目的是演示 MRO 的构建方式,而不是打印特定的输出。我们鼓励您尝试 super() 调用,以更深入地了解 Python 的继承模型。

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

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