首页 > 其他分享 >多继承背景下的调用逻辑【MRO】

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

时间:2025-01-10 11:57:05浏览次数:1  
标签:__ 逻辑 调用 Form 继承 forms init 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 继承过来的那些基本的表单特性和属性都能正确设置好。

标签:__,逻辑,调用,Form,继承,forms,init,MRO
From: https://www.cnblogs.com/cloud-2-jane/p/18663703

相关文章

  • 基于Simulink的模糊逻辑控制(Fuzzy Logic Control, FLC)的他励直流电动机与永磁直流电动
    目录基于Simulink的模糊逻辑控制(FuzzyLogicControl,FLC)的他励直流电动机与永磁直流电动机模型实例1.项目背景2.系统架构2.1他励直流电动机简介2.2永磁直流电动机简介2.3模糊逻辑控制原理3.模型设计3.1他励直流电动机建模3.2永磁直流电动机建模3.3模糊逻......
  • 使用API方式远程调用ollama模型
    在有GPU的环境启动一个ollama大模型,非常简单:注意,ollama启动时默认监听在127.0.0.1:11434上,可以通过配置OLLAMA_HOST环境变量修改点击查看代码exportOLLAMA_HOST="0.0.0.0:11434"ollamaserve&ollamarunqwen2.5:7b-instruct然后就可以在远端访问:点击查看代......
  • C# 调用YoloSharp.Gpu,调用Microsoft.ML.OnnxRuntime.Gpu出错126
    今天使用C#调用YoloSharp.Gpu,加载onnx模型,然后检测,代码很简单。//LoadtheYOLOpredictorpredictor??=newYoloPredictor(@"pathtoyour.onnx");//Runmodelvarresult=predictor.Detect(@"pathtoyourimage");一运行就爆错ONNXRuntimeError:1:FAIL:LoadL......
  • 玩转LangChain:从模型调用到Prompt模板与输出解析的完整指南
    系列文章目录01-玩转LangChain:从模型调用到Prompt模板与输出解析的完整指南文章目录系列文章目录前言一、LangChain环境搭建与初始配置1.1安装依赖1.2环境变量加载1.2.1具体步骤1.2.2注意事项1.3初始化模型客户端二、基础示例:与模型交互2.1直接调用模型2.1.1......
  • JNI接口--实现Java调用C++
    1、JNI原理概述通常为了更加灵活高效地实现计算逻辑,我们一般使用C/C++实现,编译为动态库,并为其设置C接口和C++接口。用C++实现的一个库其实是一个或多个类的简单编译链产物,然后暴露其实现类的构造方法和纯虚接口类。这样就可以通过多态调用到库内部的实现类及其成员方法。进一步地......
  • 数据架构 | 逻辑数据仓库与物理数据仓库性能对比
    在逻辑数据湖和逻辑数据仓库方法中,数据虚拟化系统在多个数据源之上提供统一的查询访问和数据治理功能(见图1)。这些数据源通常包括一个或多个物理数据仓库、Hadoop集群、SaaS应用程序以及其他数据库。两种方法的主要区别在于:逻辑数据湖更强调Hadoop的作用,而逻辑数据仓库则更......
  • CDS标准视图:安排维护计划的调用 I_MAINTENANCEPLANSCHEDULE
    视图名称:安排维护计划的调用I_MAINTENANCEPLANSCHEDULE视图类型:视图代码:点击查看代码@AbapCatalog.compiler.compareFilter:true@AbapCatalog.sqlViewName:'IMPLASCHED'@AccessControl.authorizationCheck:#CHECK@ClientHandling.algorithm:#SESSION_VARIABLE@End......
  • EBS在form中调用另一个form的方法,函数:fnd_function.execute
    如何在form1中调用form2呢?可以使用函数fnd_function.execute。其函数定义如下:fnd_function.execute(function_name,--功能名称open_flag,session_flag,--两个form是否使用同一个会话other_params--参数activate_flag--光标是否移到新formbrower_target);例子1:fnd_function......
  • 豆包AI数学对话的底层逻辑
    引言;在一次偶然的机会我使用豆包AI在求解一道数学题目的过程中,发现了最基本的数学公式,即便是我认为AI数学对话中的底层逻辑,本次我的研究,也是基于这一底层逻辑进行分析,刨析AI对话中如何实现从图片到解题这一过程,了解AI数学对话的底层思想对于豆包AI,其求解数学题目分为如下几......
  • C#基于pythonnet调用Python的pyd文件,实现交互
    privatevoidTestPython(){try{//python环境路径stringpathToVirtualEnv=@"H:\ProgramData\anaconda3\envs\python39";Environment.SetEnvironmentVariable("PATH",pathToVirtualEnv,EnvironmentVari......