继承paswd的技术博客

继承是一种创建新类的方式,在Python中,新建的类可以继承一个或多个父类,新建的类可称为子类或派生类,父类又可称为基类或超类

通过类的内置属性__bases__可以查看类继承的所有父类

补充 :

要找出类与类之间的继承关系,需要先抽象,再继承。抽象即总结相似之处,总结对象之间的相似之处得到类,总结类与类之间的相似之处就可以得到父类,如下图所示

基于抽象的结果,我们就找到了继承关系

基于上图我们可以看出类与类之间的继承指的是什么’是’什么的关系(比如人类,猪类,猴类都是动物类)。子类可以继承/遗传父类所有的属性,因而继承可以用来解决类与类之间的代码重用性问题。比如我们按照定义Student类的方式再定义一个Teacher类

类Teacher与Student之间存在重复的代码,老师与学生都是人类,所以我们可以得出如下继承关系,实现代码重用

Teacher类内并没有定义​​__init__​​​方法,但是会从父类中找到​​__init__​​,因而仍然可以正常实例化,如下

这整个的过程就是我们平常写代码 , 怎么样写出来继承的 , 先分开写类 , 然后有重复的代码 , 归纳到父类中继承

有了继承关系,对象在查找属性时,先从对象自己的​​__dict__​​中找,如果没有则去当前类中找,然后再去父类中找

父类如果不想让子类覆盖自己的方法,可以采用双下划线开头的方式将方法设置为私有的

关于多继承下的属性查找 , 会涉及到菱形问题 , 以及python多继承的优缺点 , 和mixins机制 , 下面单独具体介绍

大多数面向对象语言都不支持多继承,而在Python中,一个子类是可以同时继承多个父类的,这固然可以带来一个子类可以对多个不同父类加以重用的好处,但也有可能引发著名的 Diamond problem菱形问题(或称钻石问题,有时候也被称为“死亡钻石”),菱形其实就是对下面这种继承结构的形象比喻

这种继承结构下导致的问题称之为菱形问题:如果A中有一个方法,B和/或C都重写了该方法,而D没有重写它,那么D继承的是哪个版本的方法:B的还是C的?如下所示

python到底是如何实现继承的呢? 对于你定义的每一个类,Python都会计算出一个方法解析顺序(MRO)列表,该MRO列表就是一个简单的所有基类的线性顺序列表,如下

python会在MRO列表上从左到右开始查找基类, 直到找到第一个匹配这个属性的类为止。 而这个MRO列表的构造是通过一个C3线性化算法来实现的

如果继承关系为菱形结构,那么经典类与新式类会有不同MRO,分别对应属性的两种查找方式:深度优先和广度优先

小结

一个子类可以同时继承多个父类,这样的设计常被人诟病,一来它有可能导致可恶的菱形问题,二来在人的世界观里继承应该是个”is-a”关系。 比如轿车类之所以可以继承交通工具类,是因为基于人的世界观,我们可以说:轿车是一个(“is-a”)交通工具,而在人的世界观里,一个物品不可能是多种不同的东西,因此多重继承在人的世界观里是说不通的,它仅仅只是代码层面的逻辑。不过有没有这种情况,一个类的确是需要继承多个类呢?

答案是有,我们还是拿交通工具来举例子:

民航飞机、直升飞机、轿车都是一个(is-a)交通工具,前两者都有一个功能是飞行fly,但是轿车没有,所以如下所示我们把飞行功能放到交通工具这个父类中是不合理的

但是如果民航飞机和直升机都各自写自己的飞行fly方法,又违背了代码尽可能重用的原则(如果以后飞行工具越来越多,那会重复代码将会越来越多)。

怎么办???为了尽可能地重用代码,那就只好在定义出一个飞行器的类,然后让民航飞机和直升飞机同时继承交通工具以及飞行器两个父类,这样就出现了多重继承。这时又违背了继承必须是”is-a”关系。这个难题该怎么解决?

python提供了Mixins机制,简单来说Mixins机制指的是子类混合(mixin)不同类的功能,而这些类采用统一的命名规范(例如Mixin后缀),以此标识这些类只是用来混合功能的,并不是用来标识子类的从属"is-a"关系的,所以Mixins机制本质仍是多继承,但同样遵守”is-a”关系,如下

简单总结 : 多继承中遇到混合继承 , 那么就采用Mixins机制解决 , 注意这不是语法严格要求的 , 这是约定俗成的

使用Mixin类实现多重继承要非常小心

子类可以派生出自己新的属性,在进行属性查找时,子类中的属性名会优先于父类被查找 , 那么在子类派生的新方法中如何重用父类的功能???

方式1: 指名道姓调用某一类下的函数=>不依赖继承关系

方式2: super()调用父类提供给自己的方法=>严格继承关系

super方法会在后面我们重写父类方法的时候必须先加上这一行代码 , 为的是不破坏原来父类中该方法的代码 , 我们只是重用并新增一些代码 , 即在原来的基础上追加

在一个类中以另外一个类的对象作为数据属性,称为类的组合。​​就是把对象当成属性​​

组合与继承都是用来解决代码的重用性问题。不同的是:继承是一种“是”的关系,比如老师是人、学生是人,当类之间有很多相同的之处,应该使用继承;而组合则是一种“有”的关系,比如老师有生日,老师有多门课程,当类之间有显著不同,并且较小的类是较大的类所需要的组件时,应该使用组合,如下示例

此时对象teacher1集对象独有的属性、Teacher类中的内容、Course类中的内容于一身(都可以访问到),是一个高度整合的产物

1、继承是指函数之间相同性很高时,可以采取从基类(父类)继承相同的部分,形成派生类(子类)。如图:可以将三者相同部分写成一个函数然后分别继承2、继承方式三种:public,private,protected3、总结:1、基类private成员在派生类中无论以什么方式继承均不可见(在类外与类内均不能直接访问);2、基类的私有成员在子类均不可见,基类的其他成员在子类的访问方式取权限小的;public&

python继承

main方法能重载么?main方法能被其他方法调用么?main方法可以继承么?我们一开始学习 Java 程序的时候,最先跑的一段代码肯定是 main 方法,main 方法的格式如下:public static void main(String[] args) {}那么 main 方法有什么特殊的地方呢?今天我们来简单看一下。首先针对 main 方法的格式定义:「publi

继承 :继承是一个关于 构造函数 的高阶应用继承一定是出现在 两个构造函数 之间的

一、基类与派生类的概念基类(父类):在继承关系中处于上层的类 派生类(子类):在继承关系中处于下层的类class A;class B;class C:public A //C为A的子类,A为C的父类{};class D:public A,public B //D为A和B的子类,A和B均为D的父类{};二、类派生列表派生类通过派生类列表来指出其从哪个(哪些)基...

继承实际上是存在于面向对象程序设计中的两个类之间的一种关系,是面向对象程序设计方法的一个重要手段,通过继承可以更有效地组织程序结构,明确类间的关系,充分利用已有的类来完成更复杂、更深入的开发。当一个类拥有另一个类的所有数据和操作时,就称这两个类之间具有继承关系。被继承的类称为父类或超类,继承了父类或超类的所有数据和操作的类称为子类。在Java语言程序设计类头定义中用extends表明子类与父类

实验3:权限的继承,取消继承,强制继承实验目标继承:在e:\tom文件夹上添加tom用户读和写的权限,在e:\tom文件夹下创建子文件夹,查看子文件夹的NTFS权限tom用户是否具有读写权限取消继承:保留子文件夹tom用户的NTFS权限为读,取消上级文件夹继承的写权限强制继承:在父文件夹tom文件夹上配置强制继承实验环境略实验步骤一、 在e:\tom文件夹上添加tom用户读和写的权限右击

# TypeScript中的多重继承TypeScript 是一种为 JavaScript 提供静态类型的语言。它支持面向对象的编程,包括类和继承。但与某些其他编程语言(如 C++ 和 Python)不同,TypeScript 不支持多重继承。在 TypeScript 中,如果需要实现多重继承的效果,通常会用以下几种方式:接口、混入(mixins)、以及组合模式。## 1. TypeScri

一、多继承1、多继承基本语法2、多继承子类构造初始化3、多继承中访问父类成员二、多继承案例1、代码示例 - 简单多继承案例2、代码示例 - 多继承构造函数案例

一、继承简介1、继承概念2、继承语法3、单继承与多继承二、代码示例1、代码示例 - 单继承2、代码示例 - 多继承

一个子类继承父类时,可按照public、private和protected方式继承父类,每种继承方式的区别如下: 1) public继承方式基类中所有public成员在派生类中为public属性; 基类中所有protected成员在派生类中为protected属性; 基类中所有private成员在派生类中不可访问。   2) protected继承方式基类中的所有...

多重继承的特性和使用和单继承没区别。按照单继承来使用即可。多重继承可能会引入一个“菱形继承的问题”,这个问题其实并不算问题,因为它合情合理

学无止尽,积土成山,积水成渊-《C++反汇编与逆向分析技术揭秘》 读书笔记。马上就要出差了,回来后接着写吧。一、概述  菱形继承是最复杂的对象结构,菱形结构会将单一继承与多重继承进行组合。菱形继承示意如下:class A;class B : virtual public A;class C : virtual public A;class D : public B, public C;

文中“实现”一词特指接口的继承。一个类实现多个接口时,不能出现同名的默认方法。一个类既要实现接口又要继承抽象类,先继承后实现。一个抽象类可以继承多个接口(implements),一个接口却不可以继承抽象类,一个接口可以用(extends)继承多个接口。接口中默认方法加default,抽象方法abstract可省略,数据成员必须赋初值,final可省略。接口的作用是制定标准,一个各方都需要遵守的守则

练习 回合制对战游戏:奥特曼A和小怪兽A进行PK,直到一方的血量为0时结束战斗,输出谁胜利了! 如果奥特曼A胜利,则奥特曼A和奥特曼B进行Pk,直到一方的血量为0时结束战斗,输出谁胜利了! 如果小怪兽A胜利,则小怪兽A和小怪兽B进行Pk,直到一方的血量为0时结束战斗,输出谁胜利了!  首先要弄清楚奥特曼A与奥特曼B是父类与子类的关系,所以子类是可以继承到父类所有的(任何访问修饰符的属性和

两个派生类继承同一个基类而又有某个类同时继承者两个派生类,这种继承被称为菱形继承,或者钻石型继承。 这种继承所带来的问题: 羊继承了动物的数据和函数,鸵同样继承了动物的数据和函数,当草泥马调用函数或者数据时,就会产生二义性。 草泥马继承自动物的函数和数据继承了两份,其实我们应该清楚,这份数据我们只需 ...

class BaseA{}; class BaseB{}; 多继承:class C :public BaseA,Public BaseB{}; 虚继承:class D:virtual public BaseA{};

引言  在JavaScript中,实现继承的主要方式是通过原型链技术。这一篇文章我们就通过介绍JavaScript中实现继承的几种方式来慢慢领会JavaScript中继承实现的点点滴滴。原型链介绍  原型链作为JS实现继承的主要方式,其基本思想是:利用原型让一个引用类型继承另一个引用类型的属性和方法。我们可以简单回顾下构造函数、原型对象和实例对象之间的关系。每一个构造函数都有一个指向原型对象的指针

如何解读IL代码  关于IL代码,我有将从三个方面去揭开它神秘的面纱。IL代码是什么?我们为什么要去读懂IL代码?我们如何去读懂IL代码?这三个问题的解答,将是我解读IL代码的整体思路。     IL代码是什么?IL(Intermediate Language),它也称为CIL或者MSIL,翻译成中文就是“中间语言”。C#的JIT编译器可以将C#

etcd集群架构摘要 etcd集群采用Raft一致性协议实现高可用和强一致性,核心架构包含: 节点角色 Leader:处理写请求、日志复制 Follower:接收Leader指令、参与选举 Candidate:选举过渡状态 数据分布 写请求通过Leader协调,并行复制到多数节点后提交 读请求支持线性化读和过期读两种模式 故障处理 心跳机制检测节点存活 选举机制自动选主 日志复制确保数据一致性 集群通过负载均衡器分发请求,各节点独立存储数据并定期备份,形成完整的分布式键值存储解决方案。

传统的大语言模型采用的训练目标是 Next-Token Prediction (NTP),即在位置 t 上预测下一个 token (t+1)。而 Multi-Token Prediction (MTP) 的核心思想在于: 不仅预测下一个 token,而是能够同时预测多个未来的 token。 这种方式 ...

python namespace 和 scope 详解我感觉很多英文名词翻译过来可能会引起误解,因为大家的背景各异,看过的书也不一样,对名词的理解也有差异,为了表述不会引起歧义,对于一些名词,文中全都用英文。name(也叫 identifier)只是 objects 的 Name。这个解释跟没有解释一样。但是在python中, 所有的东西都是一个 ob

THE END
0.开宝马1系行驶8200公里,车主说出了它的优缺点,你赞同吗?就在最近,身边就有一位车友放弃本田思域,选择花15万提入门版的宝马1系,如今开宝马1系行驶8200公里,车主说出了它的优缺点,你赞同吗? 在选车的过程,车主告诉笔者,自己之所以放弃本田思域而选择宝马1系,原因就是自己的前女友跟着一个开奔驰C级的男人跑了,那个时候自己开着一辆二手的飞度,所以在本田思域和宝马1系之间jvzquC41m0yjpj3ep1gsvrhnga8799;843;2aBk4h381995322r3d?3jvor@ckBskenf(hwgytoug]nog?775;<27;984A=(jvzq?owqojzur
1.变速箱你知道多少?市面上的三种变速箱,一次性把优缺点告诉你但是从我们的角度看,手动挡车型除了有驾驶乐趣外,它的维修成本也比自动挡的低。但在人人都想轻松的时代,当然开车越简单越好,肯定在买车的时候,选择最简单的自动挡车型。那么自动挡的优缺点,今天一次性告诉你,以后买车你就自己去吧。 最早使用的自动变速箱就是AT变速箱,如今的它还是稳定性最好的变速箱了,现在jvzquC41m0yjpj3ep1gsvrhnga<:9:8;3;92a:>h:8lgdk52326s7ry0jvsmAjg?skiig/dtgyxjvnYkogC28<7635?34>85(jzurFktqonuvy
2.双门轿车在城市驾驶有哪些优势?其次,部分双门轿车动力与操控性佳,转向精准、刹车灵敏,驾驶乐趣足。再者,车内静谧性不错,能有效过滤颠簸,带来舒适驾乘感受。此外,一些双门车还具备油耗低、维护成本低的优势 。 双门轿车紧凑的车身尺寸是其在城市驾驶中的一大法宝。相较于普通四门轿车,双门轿车更为小巧玲珑,长度和宽度往往更具优势。以宝马两门jvzquC41yy}/rlfwvq4dqv3ep1gtm86738;287mvonEbfF78839
3.双门轿车怎么样它们的外形流畅轴距较短车身更低发动机前置底盘设计与常规轿车共用这使得车辆在行驶时更加稳定加速和操控性能也更为出色。 在外观方面双门轿车独具魅力。双座轿车的客厢部分相对缩减车头和车尾看上去有所加长整体呈现细长形态动感轻快。顶盖后部、后窗和后行李厢连成一道优美曲线形成独特的两段式观感显得轻盈灵动。 以宝马jvzquC41o0vdc~yq0eun0ls1dcolg8;82;7:1:7::8721
4.什么样的人适合开两门轿跑?什么样的人适合开两门轿跑? 如果你正在考虑买一辆双门轿跑,那么有两件事你得先想清楚:一是你得单身或者没娃,二是你得对车的空间要求不高。双门轿跑嘛,天生就不是为家用设计的,后排空间小,上下车也不方便,如果你经常需要载人或者用后排,那还是别给自己找麻烦了。 jvzquC41o0pqsnc0eun1yfigu5eqwlvck5jpmjzAkj>6>5749=12;+htqs`u{h?dkpja}fd
5.奔驰GLAAMG优缺点奔驰GLAAMG问答奔驰的CLK 是两门跑车。奔驰的E级是中大型轿车。当然有敞篷轿跑版。SL 和 SLK 则是舒适型的跑车,jvzquC41yy}/7Ahjg0ipo8fum1;6694828=747mvon
6.【敞篷车下雨怎么办】敞篷车下雨会漏水吗软顶敞篷车优缺点对比第三类的敞篷车则是由受欢迎的固定顶轿车款式中,附带发展出来的。 敞篷车按照车门数量来分:又分为两门和四门,大部分的敞篷车都是两门式的,四门款式较为少见。 敞篷车的历史沿革 敞篷车在美式英语称为Convertible(原意为可转换的,意指敞篷车可在敞篷和普通车型之间转换),在英式英语或欧洲其他国家,通常称为CabriolejvzquC41yy}/ojniqq4dqv4iqqsbk86:75:50qyon
7.“你怎么买了一台网约车?”小鹏P5的优缺点!其实这个东西,K哥本来想把它视作缺点的。因为只要是轿车,我就得把坐姿调到最低,这样开起来更有感觉。 我知道我是异类,所以P5坐姿高是一个大大的优点。 到底有多高呢?K哥目测啊,和大多数紧凑型SUV差不多,可能稍稍低一点点,总之视野非常好。 一定程度上也提升了安全性,何乐而不为呢? jvzquC41m0yjpj3ep1gsvrhnga=27;5:29=6a:fc6e78:@523271omh0jvsmAjg?skiig/dtgyxjvnYkogC28<95;;=49?=2(jzurFktqonuvy
8.视频宾利欧陆两门敞篷轿跑,爱上我,没坎坷,爱情一路小平坡!总结一下它们各自的优缺点 0评论2025-10-25 00:18 新增长续航版,2026款深蓝S05上市,8月销量回暖 0评论2025-09-19 09:12 全新比亚迪汉长续航版震撼到来 0评论 经典车型NV200重出江湖?郑州日产2026年新产品规划露出 0评论 大众途锐2.0T素车一阶ECU特调,动力输出更直接! 0评论2025-10-25 00:17 奔驰glbjvzquC41ejkkkjmcq0s/c~yqjqsf0lto0et0kwkq16=92@86
9.2012款本田歌诗图优缺点2012款本田歌诗图优缺点 最佳答案 scy050700 2023-05-06 07:41:49 看车我才不要看歌诗图,朋友之前买过告诉我这车:1.油耗有点高;2.发动机异响;3.发动机漏油;4.制动系统ABS故障;5.变速箱漏油;6.隔音不好很吵;7.变速箱太老;8.制动系统故障灯亮;9.轮胎起皮;10.价格贵了点jvzquC41o0odc~yq0eun0ls1ecx0c|p1ecxt1B>8344ivvq
10.两门车在城市驾驶中有哪些优势?两门车在城市驾驶中优势显著,具备灵活操控、经济实用等特性。首先,其车身紧凑轻便,在狭窄街道和拥堵路况下能轻松穿梭,停车也更便捷。其次,较小的车身和重量带来更好的燃油经济性,降低使用成本。再者,两门车设计往往更时尚个性,满足追求独特的消费者。此外,内部空间设计巧妙,后排座椅放倒可拓展载货空间,实用性颇高,是jvzquC41yy}/rlfwvq4dqv3ep1gtm869:89997mvon
11.国产轿车底盘调校哪家最好车友交流综上所述,SUV和轿车各有优缺点,但如果车主经常跑高速,不追求过高驾驶速度(130km/h)的话,追求行驶稳定性和驾驶感及乘坐感的舒适性的话,SUV是比较好的选择。追求低油耗和经济性的话轿车是不错的选择。分享一个笔者的亲身体验:笔者及家人都曾经分别驾驶(乘坐)SUV和轿车跑过800km的长途,轿车燃油经济性、过弯稳定jvzquC41yy}/fxsiejkek7hqo1zbi8zie1739A9695
12.2020款福特Mustang野马EcoBoost跑车优缺点评测福特野马是一款两门轿跑车或可容纳四人的敞篷车。 2020年福特野马EcoBoost:入门级四缸野马有轿跑车或敞篷车供选择,并具有17英寸铝轮毂,空调,布座椅,皮革包裹的变速旋钮(仅手动),自动变暗的后视镜, LED前灯和尾灯,带有六个扬声器和Wi-Fi热点的4.2英寸信息娱乐系统以及带按钮启动的无钥匙进入功能。 2020年福特野马jvzquC41o0pqsnc0eun1jwvkerf1B>:6;753B>;58;92=<20jznn
13.五菱星光2025款:年轻人时尚出街的吸睛利器比亚迪海鸥补贴完只要4万多?海鸥的优缺点及保姆级选买攻略 7万次播放05-31 小桃侃车 三种动力+侧滑门!五菱全新中型MPV即将上市,9万起能不能火? 2万次阅读6天前 03:52 阿甘玩车日记 这四类二手车千万千万不要碰! 20万次播放 03:33 用户5942679257358 jvzquC41yy}/fxsiejkek7hqo1gsvrhng1=64==:4:869?92;6;2:
14.轿车两门与四门有何区别?4S店销售说漏嘴,以后买车不用纠结了!在欧洲、美国、日本等国家和地区,有一类车型非常受消费者欢迎,这就是两门轿车。许多轿车在推出的同时就有四门款和两门款供消费者选择。不光是丰田ECHO、大众GOLF等经济型轿车有两门款,就连奔驰、宝马等高级轿车也不例外。从生产成本来看,制造两门轿车比制造四门轿车要减少工艺、节省零部件,成本下降;从结构看,车身jvzquC41ejkkkjmcq0gvvxmqog4dqv3ep1oohx4362862A;
15.开了三年,说说22款帕萨特的优缺点- **承载回忆**:最关键的,它陪我走过山川湖海,见证了好多难忘的瞬间,真的很有感情。 总的来说,帕萨特优缺点并存,但对我来说,它是一台靠谱的伙伴。大家买车的话可以参考下我的体验~jvzquC41o0pqsnc0eun1yfigu5eqwlvck5jpmjzAkj>7<>446?12;+htqs`u{h?dkpja}fd
16.从五菱换到零跑,真实体验告诉你,小车也能有大空间和长续航七、优缺点总结:适合自己的才是最好的 五菱宏光MINIEV的优缺点 - 优点:价格便宜(3-4万),车身超小,停车方便,适合纯单人短途代步。 - 缺点:续航短,空间小,配置低,只适合单一通勤场景。 零跑T03的优缺点 - 优点:续航长(400公里版本足够用),五门四座空间实用,配置丰富,支持快充,适合家庭使用。 - 缺点:价格比jvzquC41yy}/fxsiejkek7hqo1gsvrhng1=64B<8;4635>9546642
17.别克君威,这些硬核的实力,你对他了解多少?车家号例如,诞生于1973年的中级轿车别克君威(参数|询价),从一开始就是“私人豪华中型车”的代表。在近半个世纪的车型变革中,别克君威经历了从两门轿车到四门轿车、从后驱到前驱、从8缸到6缸再到4缸、从美式到欧式设计的巨大变化,这些变化正反映了别克与时俱进的态度,也为君威指明了前进的方向。目前,这款车已经发展jvzquC41ejkkkjmcq0gvvxmqog4dqv3ep1oohx4367833A7
18.日产Versa:2025年2万美元以下最佳轿车可靠性:由于机械装置简单、电子设备较少,2 万美元以下的最佳轿车应该是可靠的。 购买20,000 美元以下轿车时应考虑哪些因素 无论您是想寻找四门通勤车还是两门经济型运动轿车,都应该考虑到各自的优缺点。这些车并非顶尖之选,但在某些方面仍能脱颖而出。所以,务必确保您买到的是符合您需求的车型,或者您也可以考虑选jvzquC41yy}/{xtlkc4dqv4ctvodnn4324?19=532:675?5:93;/j}rn