Python多继承 super 执行父类init

今天学习多继承,遇到了super继承顺序的问题
A是父类,BC继承A,D多继承BC

class A:
    def __init__(self):
        print("A")

class B(A):
    def __init__(self):
        print('B')
        super().__init__()

class C(A):
    def __init__(self):
        print('C')
        super().__init__()

class D(B, C):
    def __init__(self):
        super().__init__()

d= D()

则会得到结果

B
C
A

D.__mro__(__main__.D, __main__.B, __main__.C, __main__.A, object)

如果稍作修改,注释掉B类中的super

class A:
    def __init__(self):
        print("A")

class B(A):
    def __init__(self):
        print('B')
        super().__init__()

class C(A):
    def __init__(self):
        print('C')
        super().__init__()

class D(B, C):
    def __init__(self):
        super().__init__()

d= D()

则会得到结果

说明没有执行C的init
python3中的多继承顺序依赖于方法解析顺序(MRO)
执行到B的init后,如果需要执行A的init话,才需要执行C的init。如果不执行A的init话,C的init也无需执行。

另一种情况,如果注释掉C的super

class A:
    def __init__(self):
        print("A")

class B(A):
    def __init__(self):
        print('B')
        super().__init__()

class C(A):
    def __init__(self):
        print('C')
        super().__init__()

class D(B, C):
    def __init__(self):
        super().__init__()

d= D()

得到结果

B
C

根据MRO,先是B的init,B的init调用A的init,但是想要调用A的init需要根据顺序先调用C的init,C的init中没有super,执行完C的init程序结束

Original: https://www.cnblogs.com/antelx/p/15871578.html
Author: Antel
Title: Python多继承 super 执行父类init

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/643588/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • markdown常用到的语法

    后加文字,几个#代表几级标题,最高为6 ,标准语法一般在#后跟个空格再写文字。 三个或者三个以上的 – 或者 * 格式: ![A](B “C”) A:显示在下方的图片内…

    技术杂谈 2023年7月11日
    0125
  • 我告诉你哦,最好吃的海南鸡饭不在海南…

    我告诉你哦,最好吃的海南鸡饭不在海南… http://www.360doc.com/content/15/0827/21/19476362_495258054.shtm…

    技术杂谈 2023年5月31日
    0104
  • RabbitMQ学习笔记

    什么是MQ? Message Queue,消息队列,FIFO,队列中存储的是message,是一种跨进程的通信机制,用于上下游传递消息。在互联网架构中,是一种非常常见的&#8221…

    技术杂谈 2023年7月11日
    0117
  • 一图学Python

    网上有这样一张图片,信息量很大,通常会被配上标题”一张图让你学会Python“: 这张图流传甚广,但我没有找到明确的出处,图片上附带了 UliPad 的作者…

    技术杂谈 2023年7月25日
    0132
  • JAVA第一课(Hello World)—-下载配置Java环境

    一、前期准备工作 1、下载Java(推荐下载JDK8) (1)百度搜索JDK8,找到下载地址(注册一下Oracle的账号就能直接下载) (2)配置环境 此电脑→属性 →高级系统设置…

    技术杂谈 2023年6月21日
    0117
  • Docker-dockerfile

    Docker-通过Dockerfile创建镜像 1.Dockerfile简介 简而言之,Dockerfile 是一个描述如何创建 Docker 镜像所需步骤的文本文件。 一个Doc…

    技术杂谈 2023年7月10日
    0109
  • WIN10平板系统 如何自定义分辨率,修改分辨率

    从以下网址下载Intel网卡驱动,注意只要下载zip版本的(如果是exe 版本的,双击将提示win10无法为此计算机验证正在安装的驱动程序,也包括你用驱动精灵这种软件,也会安装的时…

    技术杂谈 2023年5月31日
    0162
  • PYTORCH: 60分钟 | TORCH.AUTOGRAD

    torch.autograd 是PyTorch的自动微分引擎,用以推动神经网络训练。在本节,你将会对autograd如何帮助神经网络训练的概念有所理解。 背景 神经网络(NNs)是…

    技术杂谈 2023年7月25日
    0133
  • webrtc统计信息之rtt计算

    1. 概述 WebRTC使用 SR/RR包来计算rtt的 SR报文格式: RR报文格式: 2. 相关代码 RTCPSender::BuildSR RTCPSender::Build…

    技术杂谈 2023年5月31日
    0131
  • 利用Tensorboard可视化模型、数据和训练过程

    在60分钟闪电战中,我们像你展示了如何加载数据,通过为我们定义的 nn.Module的子类的model提供数据,在训练集上训练模型,在测试集上测试模型。为了了解发生了什么,我们在模…

    技术杂谈 2023年7月25日
    0126
  • AtCoder Beginner Contest 234

    AtCoder Beginner Contest 234 A – Weird Function 思路分析: 直接写就行 代码如下: #include using nam…

    技术杂谈 2023年7月24日
    0107
  • skia skp文件编码格式

    博客园 :当前访问的博文已被密码保护 请输入阅读密码: Original: https://www.cnblogs.com/bigben0123/p/15663128.htmlAu…

    技术杂谈 2023年5月31日
    0102
  • 强软弱虚引用,只有体会过了,才能记住

    以前学习强软弱虚引用的时候,只是走马观花看看博客,并没有自己写代码去实践、去证明,导致每次看完后,过不了多久就忘了,后来下定决心,一定要自己敲敲代码,这样才能让印象更加深刻,古人云…

    技术杂谈 2023年7月25日
    092
  • 5分钟搞定MySQL到PolarDB-X数据迁移和同步-CloudCanal实战

    CloudCanal 近期支持了 PolarDB-X 对端, 目前开放的链路为 MySQL 到 PolarDB-X 。 本链路特点包括 完整支持结构迁移、全量迁移、增量同步、数据校…

    技术杂谈 2023年7月24日
    074
  • cesium实现电弧球体效果[转]

    文章目录 * – 1.实现效果 – 2.实现方法 – + 2.1材质实现 + 2.2代码调用 1.实现效果 ; 2.实现方法 通过自定义椭球体的…

    技术杂谈 2023年5月31日
    0116
  • es index template

    建一个索引的步骤 1:先创建轮滚策略 2:创建模板 3:创建索引 创建轮滚策略 创建索引模板 根据模板创建索引 创建索引后,如果要观察轮滚效果,可以手动滚动 修改mapping后数…

    技术杂谈 2023年7月10日
    0112
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球