多继承背景下的调用逻辑【MRO】

MRO#

MRO(Method Resolution Order,方法解析顺序)是指在多继承情况下,Python 解释器按照特定的顺序来查找和调用方法的规则。

class A:
    pass

class B:
    pass

class C(A, B):
    pass

print(C.__mro__)
# 输出:(<class '__main__.C'>, <class '__main__.A'>, <class '__main__.B'>, <class 'object'>)

多继承背景下的调用逻辑#

以下是对 BootStrapForm 类中 super().__init__(*args, **kwargs) 具体情况的详细解释:

在Python的面向对象多继承体系中,像 LoginForm 类继承了 BootStrapFormforms.Form 这两个类。当在 BootStrapForm__init__ 方法里写了 super().__init__(*args, **kwargs) 时,Python会依据方法解析顺序(MRO)规则来确定到底调用哪个父类的 __init__ 方法。

一般来说,Python 3遵循的是C3线性化的MRO算法,按照这个规则,它会先查找继承链里相对更靠前的父类的 __init__ 方法来执行(这里就是 forms.Form__init__ 方法,通常情况下,Python解释器会认为它在继承顺序里更靠前,当然这取决于具体的类定义顺序等因素)。

例如,假设我们简化一下代码逻辑来看看继承顺序,可以使用 LoginForm.__mro__ 来查看方法解析顺序,可能得到类似这样的元组 (LoginForm, BootStrapForm, forms.Form, object),这表明在查找方法时,会按照这个顺序依次查找,所以 super().__init__(*args, **kwargs) 首先调用的就是 forms.Form__init__ 方法,目的是让 forms.Form 完成自身相关的初始化操作,比如初始化表单里包含的各个字段相关的基础属性等内容,确保从 forms.Form 继承过来的那些基本的表单特性和属性都能正确设置好。

作者:cloud-2-jane

出处:https://www.cnblogs.com/cloud-2-jane/p/18663703

版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。

posted @   一只大学生  阅读(8)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
more_horiz
keyboard_arrow_up dark_mode palette
选择主题
menu
点击右上角即可分享
微信分享提示