当前位置: 首页 > news >正文

Python进阶-----面对对象4.0(面对对象三大特征之--继承)

目录

前言:

Python的继承简介

1.什么是继承 

2.继承的好处

 3.object类

继承的相关用法

 1.继承的定义与法则

2.对继承的重写

 3.(单继承)多层继承

4.多继承

 5.多继承重写时调用父类方法


前言:

        在讲之前,我想说说中国古代历史。我们都知道在古代,君王的传位是遵循嫡长子继承制的,皇帝的位置一般是传给太子的,那在继承的过程中也就是说皇帝的所有权利以及所拥有的东西都会传给下一个皇帝,但是相关的规矩一般是不会变化的,比如说朝代的国号以及一些重要制度,但是这不代表新皇帝不可以去改革,比如战国时期秦国的商鞅变法。

        好了这里讲这么多,我们对“继承”这个词有点理解吧,在Python中也基本上是遵循这样的规则的,废话不多说,一起来看看吧!!!

Python的继承简介

1.什么是继承 

        继承嘛,顾名思义就是后者继承先者的某些特征和属性,比如说:儿子继承老爸的股份,太子继承皇位等等。在Python中,被继承的类叫做父类,继承的类叫做子类,子类继承父类的属性和方法

2.继承的好处

  • 继承可以解决重复类的代码造成的冗余

  • 继承可以提高代码的复用性

 3.object类

在python中所有的类都继承于object,object就是基类,超类 ,所以object类是所有类的父类

class A:pass
class B(object):pass
#object类是所有类的父类,也就是说如果一个类没有指定继承哪个类,那么就会默认继承object类
#所以A和B类都是继承object类,是一样的

我们可以去通过dir()  来获取object类具有的方法,如下所示:

class A(object):def __init__(self,name,age):self.name=nameself.age=age
a=A('Jack',15)
print(a)
#输出结果:<__main__.A object at 0x00000216806D0460>

继承的相关用法

 1.继承的定义与法则

定义

class Son(Father):

 法则

一般来说,子类可以继承父类的属性和方法,但是这些属性和方法都是公有的,不是私有化的,所以父类的私有化属性和方法是继承不了的

示例:

class Oldking(object):def __init__(self,name,clothes,seal,mausoleum):self.name=nameself.clothes=clothesself.seal=sealself.__mausoleum=mausoleum#私有化属性def dynasty(self):print('唐朝')def __years(self): #私有化方法print('贞观之治')class Newking(Oldking):passt=Newking('武则天','龙袍','玉玺','帝陵')
print(t.name,t.clothes,t.seal) #这里无法输出  帝陵,因为被父类私有化了
t.dynasty()  #同时也无法所以__years() 方法,这个方法也是私有化了
#输出结果:武则天 龙袍 玉玺
#         唐朝

2.对继承的重写

        新皇帝可以继承老皇帝的权利,那当然可以进行相关制度的改革,或者说是年号的改革,比如说唐太宗年号为贞观之治,武则天的是贞观遗风。所以我们在Python中子类也可以对父类继承的东西进行重写。

class Old(object):def __init__(self):self.king='隋炀帝'self.clothes='龙袍'def dynasty(self):print('这是隋朝')class New(Old):def __init__(self):self.king='唐高祖'self.clothes=Old().clothesdef dynasty(self):print('这是唐朝')
t=New()
print(t.king,t.clothes)
t.dynasty()
#输出结果:唐高祖 龙袍
#         这是唐朝

这个示例可以看出,重写了朝代和皇帝的名字,然而对龙袍进行了保留继承

 3.(单继承)多层继承

        多层继承就涉及到父类继承其父类,子类又继承父类,就是一种继承的嵌套,也就是孙子继承父亲的,父亲继承爷爷的。当然在每次继承的过程中也是可以对相关内容进行重写。在继承过程中,属性的查找顺序是先从自身属性去查找,如果找不到就去父类去查找,如果父类还找不到就去爷爷类查找,以此类推……

        顺序:对象>子类>父类>父父类

示例:

class Grandpa(object):def __init__(self):self.__name='史蒂夫'self.money=100def fun(self):print('传家宝:尚方宝剑')
class Father(Grandpa):def __init__(self):self.money=2**10
class Son(Father):def college(self):print('GUET')
AJ=Son()
print(AJ.money)
AJ.fun()
AJ.college()
#输出结果:
# 1024
# 传家宝:尚方宝剑
# GUET

这个也是很好理解的,如果父类没有特定设置私有化属性的话,子类会一一继承,如果一直嵌套下去的话,到最后子类具有的属性和特点会非常多,这就是一个累积过程。当我们去创建一个实例对象,然后去查找这个实例对象相关属性和方法时,这会依次向父类查找,直到找到为止。

4.多继承

        多继承是表示一个子类具继承个父类,也就是说一个儿子有多个父亲(到处认爹) 一个子类继承多个父类的东西。

继承顺序:在继承中出现相同方法则继承顺序是从左到右

示例1: 

class Father0(object):def fun(self):print('有钱')
class Father1(object):def fun(self):print('穷')
class Son0(Father0,Father1):pass
class Son1(Father1,Father0):pass
Jack=Son0()
jb=Son1() #输出结果:有钱
Jack.fun()
jb.fun() #输出结果:穷

在多继承中,我们可以去通过__mro__方法去查看继承的属性,(从左到右)

示例2: 

class G:pass
class E(G):pass
class F(G):pass
class B(E):pass
class C(F):pass
class D(G):pass
class A(B, C, D):pass
son=A()
print(A.__mro__) #查看相同的方法继承顺序

输出结果:

顺序为:A->B->E->G->C->F->D->object

 5.多继承重写时调用父类方法

 

在重写多/但继承父类的方法时,但是又想调用父类的方法,这时候就用到super() 方法

 super() 方法是按照上面所说的继承顺序来执行的,也就是执行第一个继承的父类的方法

class Sheep(object):def sound(self):print('咩咩咩')
class Cat(object):def sound(self):print('喵喵喵')def animal(self):print('猫咪')
class Dog(Sheep):def animal(self):print('小狗')
class A(Dog,Cat):def sound(self):print('哈哈哈')super().sound() #调用(按照顺序)父类的方法
tt=A()
tt.sound()
#输出结果:哈哈哈
#        咩咩咩

可能会有些人疑惑,明明Dog没有定义sound() 方法,但是又为什么可以找到呢,其实是Dog继承了Sheep类,是在这里找到了sound() 方法

其实如果我们想去直到调用哪一个父类的方法,我们可以直接去声明调用:

父类.方法(self)

class Cat(object):def sound(self):print('喵喵喵')def animal(self):print('猫咪')
class Dog(object):def animal(self):print('小狗')
class A(Dog,Cat):def sound(self):Cat.sound(self)####print('哈哈哈')
tt=A()
tt.sound()
print(A.__bases__)
#输出结果:喵喵喵
#        哈哈哈

好了,这一期就到这里了先,我们下一期再见~~~

分享一张壁

 

相关文章:

Python进阶-----面对对象4.0(面对对象三大特征之--继承)

目录 前言&#xff1a; Python的继承简介 1.什么是继承 2.继承的好处 3.object类 继承的相关用法 1.继承的定义与法则 2.对继承的重写 3.&#xff08;单继承&#xff09;多层继承 4.多继承 5.多继承重写时调用父类方法 前言&#xff1a; 在讲之前&#xff0c;我想说说中…...

九龙证券|利好政策密集发布,机构扎堆看好的高增长公司曝光

新能源轿车销量和保有量快速增长&#xff0c;带来了充电桩商场的微弱需求。 日前&#xff0c;商务部部长王文涛表明&#xff0c;本年将在落实好方针的一起&#xff0c;活跃出台新方针办法&#xff0c;比方辅导当地展开新能源轿车下乡活动&#xff0c;优化充电等使用环境&#x…...

stm32CubeIDE FMC 驱动LCD(8080)

一&#xff0c;TFT屏硬件接口16位&#xff0c;80并口。二&#xff0c;FMC介绍。FSMC&#xff08;Flexible Static Memory Controller&#xff09;&#xff0c;译为灵活的静态存储控制器。STM32F1 系列芯片使用 FSMC 外设来管理扩展的存储器&#xff0c;它可以用于驱动包括 SRAM…...

Java 数据类型

数据类型用于对数据归类&#xff0c;以便开发者理解和操作。 基本数据类型 Java 确定了每种基本数据类型所占存储空间的大小&#xff0c;不会像其它语言那样随机器硬件架构的变化而变化&#xff0c;这使 Java 程序更具可移植性。 Java 中定义了如下的基本数据类型。 byte …...

Prometheus 监控云Mysql和自建Mysql(多实例)

本文您将了解到 Prometheus如何配置才能监控云Mysql(包括阿里云、腾讯云、华为云)和自建Mysql。 Prometheus 提供了很多种Exporter&#xff0c;用于监控第三方系统指标&#xff0c;如果没有提供也可以根据Exporter规范自定义Exporter。 本文将通过MySQL server exporter 来监控…...

Vue3中的h函数

文章目录简介简单使用参数使用计数器进阶使用函数组件插槽专栏目录请点击 简介 众所周知&#xff0c;vue内部构建的其实是虚拟DOM&#xff0c;而虚拟DOM是由虚拟节点生成的&#xff0c;实质上虚拟节点也就是一个js对象事实上&#xff0c;我们在vue中写的template,最终也是经过…...

阿尔法开发板 IMX6ULL 说明

一. IMX6ULL开发板 IMX6ULL开发板即正点原子的阿尔法(ALPHA)开发板&#xff0c;采用恩智浦芯片&#xff0c;cortex-A7架构的。 二. IM6ULL开发板说明 1. IO说明 对于IMX6ULL芯片&#xff0c;一个IO对应两个寄存器&#xff0c;第一个寄存器负责配置其复用功能&#xff0c;…...

Altium Designer19 #学习笔记# | 基础应用技巧汇总

全文目录一.元件符号库二.元件封装库1.AD09 集成元件库/封装库三.电路原理图1. 巧用查找"相似对象功能"1.1 查找相同元件1.2. 查找相同文本1.3. 查找相同网络 &#xff1a;E - S - C四.PCB原理图【AD PCB模式下的常用快捷键】PCB视图放大/缩小PCB视图左/右移动PCB切换…...

Python 元类编程实现一个简单的 ORM

概述 什么是ORM?    ORM全称“Object Relational Mapping”&#xff0c;即对象-关系映射&#xff0c;就是把关系数据库的一行映射为一个对象&#xff0c;也就是一个类对应一个表&#xff0c;这样&#xff0c;写代码更简单&#xff0c;不用直接操作SQL语句。 现在我们就要实…...

《C++ Primer Plus》第18章:探讨 C++ 新标准(7)

C11 新增的其他功能 C11 增加了很多功能&#xff0c;本书无法全面介绍&#xff1b;另外&#xff0c;本书编写期间&#xff0c;其中很多功能还未得到广泛实现。然而&#xff0c;有些功能有必要简要地介绍一下。 并行编程 当前&#xff0c;为提高计算机性能&#xff0c;增加处…...

Redis学习(二):Redis安装测试

概述 Redis是什么 Redis, Remote Dictionary Server, 即远程字典服务。免费开源的数据库。 由C语言编写&#xff0c;支持网络&#xff0c;可基于内存亦可持久化的日志型、KV数据库&#xff0c;并提供所种语言的API。 Redis能干嘛 用于内存存储&#xff0c;持久化。rdb、ao…...

Vector - CAPL - 简介及数据结构

对于想进入车载行业或者已经在车载行业工作的朋友对于CAPL这个词都会相当的熟悉&#xff0c;都知道他是做车载网络测试脚本的语言&#xff0c;并且跟C有点类似&#xff0c;但是它到底是什么呢&#xff1f;CAPL全称&#xff08;Communication Access Programming Language&#…...

20230304英语学习

What Would Happen if the Moon Disappeared Tomorrow? 如果明天月球消失了会怎样&#xff1f; The closest object to our planet, the Moon, may seem like Earth’s little sibling.Since its birth, the satellite has mostly just hung around, playing gravitational t…...

【基础算法】单链表的OJ练习(3) # 移除链表元素 # 相交链表 #

文章目录前言移除链表元素相交链表写在最后前言 本章的OJ练习也是相对简单的&#xff0c;只要能够理解解题的思路&#xff0c;并且依照这个思路能够快速的写出代码&#xff0c;我相信&#xff0c;你的链表水平已经足够了。 对于OJ练习&#xff08;2&#xff09; : ->传送门…...

【自用】SpringBoot项目通用类整理

文章目录全局Json序列化Controller日志切面全局异常拦截GlobalExceptionHandlerApiResultBusinessExceptionResponseEntityUtil全局返回体包装MP自动填充接口文档配置类自定义Async异步线程池本文主要整理各类项目中通用的配置类、工具类&#xff0c;便于复查自用。 全局Json序…...

动态规划法(总述)多阶段决策最优化问题

动态规划: 研究最优控制问题提出的 该问题有n个输入&#xff0c;问题的解由这n个输入组成&#xff0c;这个子集必须满足事先给定的条件&#xff0c;这些条件称为约束条件&#xff0c;满足约束条件的可行解可能不只有一个为了衡量可行解的优劣&#xff0c;通常以一些函数的形式&…...

MySQL跨服务器数据映射

MySQL跨服务器数据映射环境准备1. 首先是要查看数据库的federated引擎 开启/关闭 状态2. 打开任务管理器&#xff0c;并重启mysql服务3. 再次查看FEDERATED引擎状态&#xff0c;引擎已启动映射实现问题总结在日常的开发中经常进行跨数据库进行查询数据。 同服务器下跨数据库进…...

利用反射实现通过读取配置文件对类进行实例化-课后程序(JAVA基础案例教程-黑马程序员编著-第十二章-课后作业)

【案例12-3】&#xff1a;利用反射实现通过读取配置文件对类进行实例化 【案例介绍】 1.案例描述 现在有一个项目&#xff0c;项目中创建了一个Person类&#xff0c;在Person类中定义了一个sleep()方法。在工程中还定义了一个Student类继承Person类&#xff0c;在Student类中…...

1.2 CSS文本属性

CSS Text(文本)属性&#xff1a; 定义文本外观&#xff0c;颜色&#xff0c;装饰&#xff0c;缩进&#xff0c;行间距来修饰文本 文本样式 文本缩进 text-indent文本水平对齐方式&#xff1a;text-align文本修饰&#xff1a;text-decoration行高 line-height CSS文本颜色属性…...

SpringCloud之认识微服务

文章目录一、传统项目转型二、走进 SpringCloud三、微服务项目搭建3.1 创建一个 SpringBoot 项目3.2 创建三个 Maven 子工程3.3 为子工程创建 application.yml3.4 引入依赖3.5 数据库 建库建表3.6 编写业务提示&#xff1a;以下是本篇文章正文内容&#xff0c;SpringCloud系列学…...

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…...

SciencePlots——绘制论文中的图片

文章目录 安装一、风格二、1 资源 安装 # 安装最新版 pip install githttps://github.com/garrettj403/SciencePlots.git# 安装稳定版 pip install SciencePlots一、风格 简单好用的深度学习论文绘图专用工具包–Science Plot 二、 1 资源 论文绘图神器来了&#xff1a;一行…...

阿里云ACP云计算备考笔记 (5)——弹性伸缩

目录 第一章 概述 第二章 弹性伸缩简介 1、弹性伸缩 2、垂直伸缩 3、优势 4、应用场景 ① 无规律的业务量波动 ② 有规律的业务量波动 ③ 无明显业务量波动 ④ 混合型业务 ⑤ 消息通知 ⑥ 生命周期挂钩 ⑦ 自定义方式 ⑧ 滚的升级 5、使用限制 第三章 主要定义 …...

生成 Git SSH 证书

&#x1f511; 1. ​​生成 SSH 密钥对​​ 在终端&#xff08;Windows 使用 Git Bash&#xff0c;Mac/Linux 使用 Terminal&#xff09;执行命令&#xff1a; ssh-keygen -t rsa -b 4096 -C "your_emailexample.com" ​​参数说明​​&#xff1a; -t rsa&#x…...

Spring Boot面试题精选汇总

&#x1f91f;致敬读者 &#x1f7e9;感谢阅读&#x1f7e6;笑口常开&#x1f7ea;生日快乐⬛早点睡觉 &#x1f4d8;博主相关 &#x1f7e7;博主信息&#x1f7e8;博客首页&#x1f7eb;专栏推荐&#x1f7e5;活动信息 文章目录 Spring Boot面试题精选汇总⚙️ **一、核心概…...

Java入门学习详细版(一)

大家好&#xff0c;Java 学习是一个系统学习的过程&#xff0c;核心原则就是“理论 实践 坚持”&#xff0c;并且需循序渐进&#xff0c;不可过于着急&#xff0c;本篇文章推出的这份详细入门学习资料将带大家从零基础开始&#xff0c;逐步掌握 Java 的核心概念和编程技能。 …...

优选算法第十二讲:队列 + 宽搜 优先级队列

优选算法第十二讲&#xff1a;队列 宽搜 && 优先级队列 1.N叉树的层序遍历2.二叉树的锯齿型层序遍历3.二叉树最大宽度4.在每个树行中找最大值5.优先级队列 -- 最后一块石头的重量6.数据流中的第K大元素7.前K个高频单词8.数据流的中位数 1.N叉树的层序遍历 2.二叉树的锯…...

代码随想录刷题day30

1、零钱兑换II 给你一个整数数组 coins 表示不同面额的硬币&#xff0c;另给一个整数 amount 表示总金额。 请你计算并返回可以凑成总金额的硬币组合数。如果任何硬币组合都无法凑出总金额&#xff0c;返回 0 。 假设每一种面额的硬币有无限个。 题目数据保证结果符合 32 位带…...

免费PDF转图片工具

免费PDF转图片工具 一款简单易用的PDF转图片工具&#xff0c;可以将PDF文件快速转换为高质量PNG图片。无需安装复杂的软件&#xff0c;也不需要在线上传文件&#xff0c;保护您的隐私。 工具截图 主要特点 &#x1f680; 快速转换&#xff1a;本地转换&#xff0c;无需等待上…...

【Redis】笔记|第8节|大厂高并发缓存架构实战与优化

缓存架构 代码结构 代码详情 功能点&#xff1a; 多级缓存&#xff0c;先查本地缓存&#xff0c;再查Redis&#xff0c;最后才查数据库热点数据重建逻辑使用分布式锁&#xff0c;二次查询更新缓存采用读写锁提升性能采用Redis的发布订阅机制通知所有实例更新本地缓存适用读多…...