Python 方法解析顺序

2023-12-12

有人可以解释给定代码的输出以及 python MRO 在这种情况下如何工作吗?

class A(object):
    def go(self):
        print("go A go!")


class B(A):
    def go(self):
        super(B, self).go()
        print("go B go!")


class C(A):
    def go(self):
        super(C, self).go()
        print("go C go!")


class D(C, B):
    def go(self):
        super(D, self).go()
        print("go D go!")


d = D()
d.go()

Output:

go A go!
go B go!
go C go!
go D go!

按照从左到右和深度,我认为应该是:

go A go!
go C go!
go D go!

但似乎它并不像我想象的那样工作。


班级的 MRO 基于其父级的 MRO:

>>> A.__mro__
(<class '__main__.A'>, <class 'object'>)
>>> B.__mro__
(<class '__main__.B'>, <class '__main__.A'>, <class 'object'>)
>>> C.__mro__
(<class '__main__.C'>, <class '__main__.A'>, <class 'object'>)
>>> D.__mro__
(<class '__main__.D'>, <class '__main__.C'>, <class '__main__.B'>, <class '__main__.A'>, <class 'object'>)

The 三个规则 are:

  1. 孩子先于父母:
  • 一个
  • B < A
  • C < A
  • D < C
  • D < B
  1. 父母按碱基顺序排列:
  • C < B
  1. 父 mros 被合并,保留它们的顺序。
  • merge B < A < object with C < A < object

在 Python 2 的早期,搜索规则曾经是深度优先左非右,但基于对 C3 线性化算法的研究,这种规则发生了变化。

See the 超级考虑超级有关在实际代码中利用该算法的方法的博客文章。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python 方法解析顺序 的相关文章

  • 如何在刻度标签和轴之间添加空间

    我已成功增加刻度标签的字体 但现在它们距离轴太近了 我想在刻度标签和轴之间添加一点呼吸空间 如果您不想全局更改间距 通过编辑 rcParams 并且想要更简洁的方法 请尝试以下操作 ax tick params axis both whic
  • CSS 继承、别名和其他很酷的东西

    有一天 我随机浏览网页 发现了一些程序 可以让你编写 CSS 别名和其他很酷的东西 我现在不记得了 举个例子 我记得你可以这样做 myclass background color red greenfont 其中 greenfont 在其他
  • 如何生成给定范围内的回文数列表?

    假设范围是 1 X 120 这是我尝试过的 gt gt gt def isPalindrome s check if a number is a Palindrome s str s return s s 1 gt gt gt def ge
  • 更改自动插入 tkinter 小部件的文本颜色

    我有一个文本框小部件 其中插入了三条消息 一条是开始消息 一条是结束消息 一条是在 单位 被摧毁时发出警报的消息 我希望开始和结束消息是黑色的 但被毁坏的消息 参见我在代码中评论的位置 插入小部件时颜色为红色 我不太确定如何去做这件事 我看
  • 如何在Windows上模拟socket.socketpair

    标准Python函数套接字 套接字对 https docs python org 3 library socket html socket socketpair不幸的是 它在 Windows 上不可用 从 Python 3 4 1 开始 我
  • SQL Alchemy 中的 NULL 安全不等式比较?

    目前 我知道如何表达 NULL 安全的唯一方法 SQL Alchemy 中的比较 其中与 NULL 条目的比较计算结果为 True 而不是 NULL 是 or field None field value 有没有办法在 SQL Alchem
  • 为 pandas 数据透视表中的每个值列定义 aggfunc

    试图生成具有多个 值 列的数据透视表 我知道我可以使用 aggfunc 按照我想要的方式聚合值 但是如果我不想对两列求和或求平均值 而是想要一列的总和 同时求另一列的平均值 该怎么办 那么使用 pandas 可以做到这一点吗 df pd D
  • 我可以使用子接口重新编译公共 API 并保持二进制兼容性吗?

    我有一个公共 API 在多个项目中多次使用 public interface Process
  • 从 scikit-learn 导入 make_blobs [重复]

    这个问题在这里已经有答案了 我收到下一个警告 D Programming Python ML venv lib site packages sklearn utils deprecation py 77 DeprecationWarning
  • 在循环中每次迭代开始时将变量重新分配给原始值(在循环之前定义)

    在Python中 你使用 在每次迭代开始时将变量重新分配给原始值 在循环之前定义 时 也就是说 original 1D o o o for i in range 0 3 new original 1D revert back to orig
  • C++11 删除重写方法

    Preface 这是一个关于最佳实践的问题 涉及 C 11 中引入的删除运算符的新含义 当应用于覆盖继承父类的虚拟方法的子类时 背景 根据标准 引用的第一个用例是明确禁止调用某些类型的函数 否则转换将是隐式的 例如最新版本第 8 4 3 节
  • 运行多个 scrapy 蜘蛛的正确方法

    我只是尝试使用在同一进程中运行多个蜘蛛新的 scrapy 文档 http doc scrapy org en 1 0 topics practices html但我得到 AttributeError CrawlerProcess objec
  • Geopandas 设置几何图形:MultiPolygon“等于 len 键和值”的 ValueError

    我有 2 个带有几何列的地理数据框 我将一些几何图形从 1 个复制到另一个 这对于多边形效果很好 但对于任何 有效 多多边形都会返回 ValueError 请指教如何解决这个问题 我不知道是否 如何 为什么应该更改 MultiPolygon
  • HTTPS 代理不适用于 Python 的 requests 模块

    我对 Python 还很陌生 我一直在使用他们的 requests 模块作为 PHP 的 cURL 库的替代品 我的代码如下 import requests import json import os import urllib impor
  • 如何将 numpy.matrix 提高到非整数幂?

    The 运算符为numpy matrix不支持非整数幂 gt gt gt m matrix 1 0 0 5 0 5 gt gt gt m 2 5 TypeError exponent must be an integer 我想要的是 oct
  • Python - 按月对日期进行分组

    这是一个简单的问题 起初我认为很简单而忽略了它 一个小时过去了 我不太确定 所以 我有一个Python列表datetime对象 我想用图表来表示它们 x 值是年份和月份 y 值是此列表中本月发生的日期对象的数量 也许一个例子可以更好地证明这
  • 如何改变Python中特定打印字母的颜色?

    我正在尝试做一个简短的测验 并且想将错误答案显示为红色 欢迎来到我的测验 您想开始吗 是的 祝你好运 法国的首都是哪里 法国 随机答案不正确的答案 我正在尝试将其显示为红色 我的代码是 print Welcome to my Quiz be
  • 为美国东部以外地区的 Cloudwatch 警报发送短信?

    AWS 似乎没有为美国东部以外的 SNS 主题订阅者提供 SMS 作为协议 我想连接我的 CloudWatch 警报并在发生故障时接收短信 但无法将其发送到 SMS YES 经过一番挖掘后 我能够让它发挥作用 它比仅仅选择一个主题或输入闹钟
  • 在 Python 类中动态定义实例字段

    我是 Python 新手 主要从事 Java 编程 我目前正在思考Python中的类是如何实例化的 我明白那个 init 就像Java中的构造函数 然而 有时 python 类没有 init 方法 在这种情况下我假设有一个默认构造函数 就像
  • PyAudio ErrNo 输入溢出 -9981

    我遇到了与用户相同的错误 Python 使用 Pyaudio 以 16000Hz 录制音频时出错 https stackoverflow com questions 12994981 python error audio recording

随机推荐

  • 为什么需要内存屏障?

    C 4 in a Nutshell 强烈推荐 使用以下代码来演示 MemoryBarrier 的概念 假设 A 和 B 在不同的线程上运行 class Foo int answer bool complete void A answer 1
  • Matlab 图形绘制 - 带标签的图例和曲线

    如何绘制如下图所示的图形 这里 图例 绿色 蓝色 在每条曲线上绘制了一些值 0 10 到 0 40 有没有可能的解决方案或提示来做到这一点 图参考 可以使用以下命令在行内绘制数据标签clabel 轮廓标签 尽管这要求您使用contour命令
  • 热通过cmd禁用buildnumber-maven-plugin

    我对 Maven 有疑问 如何通过命令行选项禁用 buildnumber maven plugin 我想在我们的持续集成服务器上运行 mvn test 命令 但是这个命令失败了 因为它试图构建一个版本并且没有访问我们的 vcs 的权限 在标
  • 用Java解析包含JS的HTML页面

    我正在尝试解析一个包含一些 JS 的网页 到目前为止我正在使用Jsoup在Java中解析html 它按预期工作 但我无法解析 JavaScript 下面是 HTML 页面的片段
  • grok 多条消息并用不同的标签处理它们

    我想在 Logstash 版本 2 4 中创建一个过滤器 在同一个 grok 中使用不同的匹配项 我想根据比赛添加不同的标签 基本上 我收到三种不同的消息模式 MAGIC 消息 REAL 消息 信息 我想做的是 grok match gt
  • 一个不错的 Java XML DOM 实用程序

    我发现自己一次又一次地编写同样冗长的 DOM 操作代码 Element e1 document createElement some name e1 setAttribute attr1 val1 e2 setAttribute attr2
  • 表格固定标题和可滚动正文

    我正在尝试使用 bootstrap 3 表制作一个具有固定标题和可滚动内容的表格 不幸的是 我发现的解决方案不适用于引导程序或搞乱风格 这里有一个简单的引导表 但由于某种原因我不知道 tbody 的高度不是 10px height 10px
  • ASP.NET 中的 XML POST 和解析

    如果有人将 XML 从应用程序发布到我的 ASP NET 页面 我如何解析它并以 XML 格式返回响应 将 XML 发布到我的 URL 的示例客户端代码 WebRequest req null WebResponse rsp null st
  • 升级 Android 项目中的领域

    我目前正在我的 Android 项目之一中运行 Realm 版本 0 82 0 我已经有一段时间没有接触 Realm 了 直到最近我注意到它们同时升级到了 2 0 2 版本 我想升级我的 Realm 版本 不幸的是 我不知道从旧版本升级到当
  • 在javafx中将纹理应用于网格

    我在使用 JavaFX 和 FXyz 0 1 1 将纹理应用到网格时遇到问题 I found 这个问题即使有详细的答案也无法弄清楚 我从头开始 准确地复制答案中的代码 场景是黑色的 没有可见的二十面体 我使用的是 Java 8 提供的图像是
  • 启动 asp.net 站点调试时 Visual Studio 2010 挂起

    我在 Windows 7 x64 上使用 Visual Studio 2010 时遇到问题 当我开始 ASP NET 站点调试时 它停止工作 唯一的解决方案是重新启动 IIS 有人有这方面的经验吗 Thanks 正如 Peter 提到的 通
  • 在 .NET Framework 4.0 中使用 TLS 1.2 时出现问题

    我禁用了 TLS 1 0 因此 我们尝试在使用 Net Framework 4 0 的 Net 应用程序中使用 TLS 1 2 我在开始时添加了此代码 System Net ServicePointManager SecurityProto
  • 如何在 JavaScript 中打开新选项卡而不切换到新选项卡?

    如何使用 javascript 打开新选项卡而不切换到新选项卡 例如 当用户单击链接时 将打开一个新选项卡 但用户应留在当前选项卡上 Web 浏览器会自动聚焦在新选项卡上 但您可以回调焦点 function openWindow url w
  • UITableViewCell 中的自动播放视频

    我已阅读了大部分问题StackOverflow用于自动播放视频 我可以在UITableView 但我遇到了一些如下所述的问题 视频开始时滚动会暂停一秒钟 视频播放前闪烁 如果向上滚动 视频不会自动播放 我想要的是像 Facebook 这样的
  • ElementList SimpleXML 中的空条目

    我的问题很简单 但我找不到任何相关信息 我有一个用于 XML 序列化的列表类和入口类 Root name entries public class List ElementList required false entry entry in
  • 如果您在页面中包含 2 个版本的 jQuery,如何将插件限制为仅使用其中一个?

    所以这个问题并不像乍听起来那么疯狂 我正在开发一段 JavaScript 代码以放入我的客户页面中 我担心的是他们是否在他们的网站上使用另一个版本的 jQuery 我知道从Jquery 文档像这样的事情应该有效 var dom dom qu
  • 在安装时创建没有管理员密码的 Windows 窗体应用程序设置

    我在 Visual Studio 中开发了一个 Windows 窗体应用程序 现在 我想在没有管理员权限的情况下在我的电脑上安装该 Windows 应用程序 我怎样才能创建一个设置 我已经在我的电脑上安装了 Photo Pad 图像编辑器应
  • Rc 依赖循环的最小示例是什么?

    我正在尝试编写一个泄漏内存的 Rust 程序由于具有引用计数的循环 下面的示例看起来应该会导致内存泄漏 但根据 Valgrind 的说法 它不会泄漏内存 是什么赋予了 test rs use std cell RefCell use std
  • 无法更新葫芦服务器版本

    更新 Calabash 服务器版本时出现问题 问题是我可以运行检查元素的基本测试 但是 一旦我尝试 触摸 按钮 葫芦就会返回 运行时错误 无法解析响应 该应用程序可能已崩溃 我相信问题的根源是我的服务器版本旧 不兼容 不是火箭科学 警告 服
  • Python 方法解析顺序

    有人可以解释给定代码的输出以及 python MRO 在这种情况下如何工作吗 class A object def go self print go A go class B A def go self super B self go pr