多继承背景下的调用逻辑【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
类继承了 BootStrapForm
和 forms.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 国际」许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架