python的多继承中的方法重写

news/2024/9/30 13:16:21

前言

多继承势必要解决同名属性冲突。今天测试一下。

正文

左右同名(左侧优先)

当左侧基类和右侧基类中存在同名方法时,不管是否包含重写,都是左侧优先。

今天主要探讨的是,左侧基类中不直接包含同名方法。

约定

我们约定,下面的标题情况全都是在左侧基类不直接包含同名方法的。

为了方便叙述,我们把“曾祖父,祖父,爸爸,儿子”称为一家人,把“叔伯(爸爸的兄弟),堂兄弟之间”称为同一家族的不同分支。

右侧重写

class A:def display(self):print('顶级父类')class B(A):passclass C(A):def display(self):print('一级子类C')class Test(B, C):# 初始化直接调用displaydef __init__(self):self.display()if __name__ == '__main__':t = Test()

可以看出,这时C的重写方法优先
image

多重继承

class A:def display(self):print('顶级父类')class A2(A):def display(self):print('一级子类A2')class B(A2):passclass C(A):def display(self):print('一级子类C')class Test(B, C):# 初始化直接调用displaydef __init__(self):self.display()if __name__ == '__main__':t = Test()

B的方法优先了,看来继承层级影响优先级,层级越深优先级越高。同一层级左侧优先。
image

由于左侧 > 右侧,所以只有右侧的继承层级高一级时,能够比左侧的重写更优先。

同一家族的不同分支

简单来说就是祖先一样,爸爸爷爷之类的都可能不同。
这个直接上结论吧,不同分支和不重写的处理方式是一样的,只要左边有,不管多少级父类,都是左边优先。

结论

直接包含

左侧直接包含(不是继承来的)某个方法,不管右侧怎么写的,一定是按左侧的方法来。

左侧不直接包含某方法

不同分支或者没有血缘关系,则左侧一定优先,不管继承层级。

同一分支(一家人)

左侧不直接包含该方法,则优先级按继承层级来分。

右侧高一级时可以优先,其余情况还是左侧优先。

我感觉这样还是相当合理的

总结

当左侧不直接包含某个方法,两个基类(B,C)的父类在族谱又是同一条线上的情况下,继承的层级影响优先级,当右侧的层级更深时(>左侧),则右侧优先,其余情况一概是左侧优先。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/29809.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

【自动化测试】关键字驱动接口自动化测试

1. 概念:  在软件测试领域,"数据驱动"和"关键字驱动"是两种自动化测试的设计模式, 它们都旨在提高测试效率,减少重复劳动,但它们的实现方式和应用场景有所不同。(1) 数据驱动(Data-Driven Testing, DDT):**优点**     a. 可变数据:测试数据的…

实验四-代码审查

一、实验题目 :代码审查 二、实验目的 1、熟悉编码风格,利用开发环境所提供的平台工具对代码进行自动格式审查; 2、根据代码规范制定代码走查表,并按所制定的审查规范互审代码。 三、实验内容 1、IDEA环境和PyCharm环境二选一; IDEA环境 (1)预先准备在IDEA环境下实现对输…

json在线解析及格式化工具

JSON 可以将程序语言对象中表示的一组数据转换为字符串,然后就可以在网络或者程序之间轻松地传递这个字符串,并在需要的时候将它还原为各编程语言所支持的数据格式,例如在 PHP 中,可以将 JSON还原为数组或者一个基本对象。在用到AJAX时,如果需要用到数组传值,这时就需要用…

Docker 桥接模式下端口映射会绕过防火墙

问题描述 使用Docker桥接模式启动了一个MySQL容器 查看防火墙发现并未开启3306端口,但该宿主机3306端口仍能被第三方机器访问telnet 152.51.32.11 3306 问题本质 Docker 在进行端口映射时,已经自动使用iptables命令修改了防火墙规则;并且这个规则不会被ufw显示、管理;甚至…

ElementUI——elementui重复引入样式

前言 按着文档操作后发现存在样式重复引入的问题,尝试了一系列的配置都未生效,最终是直接生成样式导入解决; 文档:https://element.eleme.io/#/zh-CN/component/custom-theme#yin-ru-zi-ding-yi-zhu-ti 工具:https://elementui.github.io/theme-chalk-preview/#/zh-CN 内容…

通过Dockerfile创建海量数据库VastbaseG100的docker镜像

1.Dockerfile文件内容 FROM centos:centos8LABEL maintainer="xh"COPY Vastbase-G100-installer-2.2_Build15\(17408\)-kylin_v10sp2-x86_64-no_mot-20231221.tar.gz /opt COPY db_install.rsp /opt COPY docker-entrypoint.sh /optRUN set -x \&& cd /etc/y…

水泽信息收集docker安装

具体参考水泽 Docker安装 点击跳转镜像源 1. vim /etc/docker/daemon.json //对镜像源进行配置 2. 对包进行更新 如果没有进行sudo su的话 就得sudo apt update3. 安装docker apt install docker.io #常见命令 sudo systemctl start docker sudo systemctl enable docker…

分享一个好用的网页分析工具

分析一个很好用的分析工具,网页信息检测查询,可以快速检测网页的META标签,分析标题、关键词、描述等是否符合搜索引擎。 工具地址:http://tools.linuxsou.com/chameta/ 比如我检测博客园,看下图: 千行代码,Bug何处藏。 纵使上线又怎样,朝令改,夕断肠。