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(面对对象三大特征之--继承)
目录 前言: Python的继承简介 1.什么是继承 2.继承的好处 3.object类 继承的相关用法 1.继承的定义与法则 2.对继承的重写 3.(单继承)多层继承 4.多继承 5.多继承重写时调用父类方法 前言: 在讲之前,我想说说中…...
九龙证券|利好政策密集发布,机构扎堆看好的高增长公司曝光
新能源轿车销量和保有量快速增长,带来了充电桩商场的微弱需求。 日前,商务部部长王文涛表明,本年将在落实好方针的一起,活跃出台新方针办法,比方辅导当地展开新能源轿车下乡活动,优化充电等使用环境&#x…...
stm32CubeIDE FMC 驱动LCD(8080)
一,TFT屏硬件接口16位,80并口。二,FMC介绍。FSMC(Flexible Static Memory Controller),译为灵活的静态存储控制器。STM32F1 系列芯片使用 FSMC 外设来管理扩展的存储器,它可以用于驱动包括 SRAM…...
Java 数据类型
数据类型用于对数据归类,以便开发者理解和操作。 基本数据类型 Java 确定了每种基本数据类型所占存储空间的大小,不会像其它语言那样随机器硬件架构的变化而变化,这使 Java 程序更具可移植性。 Java 中定义了如下的基本数据类型。 byte …...
Prometheus 监控云Mysql和自建Mysql(多实例)
本文您将了解到 Prometheus如何配置才能监控云Mysql(包括阿里云、腾讯云、华为云)和自建Mysql。 Prometheus 提供了很多种Exporter,用于监控第三方系统指标,如果没有提供也可以根据Exporter规范自定义Exporter。 本文将通过MySQL server exporter 来监控…...
Vue3中的h函数
文章目录简介简单使用参数使用计数器进阶使用函数组件插槽专栏目录请点击 简介 众所周知,vue内部构建的其实是虚拟DOM,而虚拟DOM是由虚拟节点生成的,实质上虚拟节点也就是一个js对象事实上,我们在vue中写的template,最终也是经过…...
阿尔法开发板 IMX6ULL 说明
一. IMX6ULL开发板 IMX6ULL开发板即正点原子的阿尔法(ALPHA)开发板,采用恩智浦芯片,cortex-A7架构的。 二. IM6ULL开发板说明 1. IO说明 对于IMX6ULL芯片,一个IO对应两个寄存器,第一个寄存器负责配置其复用功能,…...
Altium Designer19 #学习笔记# | 基础应用技巧汇总
全文目录一.元件符号库二.元件封装库1.AD09 集成元件库/封装库三.电路原理图1. 巧用查找"相似对象功能"1.1 查找相同元件1.2. 查找相同文本1.3. 查找相同网络 :E - S - C四.PCB原理图【AD PCB模式下的常用快捷键】PCB视图放大/缩小PCB视图左/右移动PCB切换…...
Python 元类编程实现一个简单的 ORM
概述 什么是ORM? ORM全称“Object Relational Mapping”,即对象-关系映射,就是把关系数据库的一行映射为一个对象,也就是一个类对应一个表,这样,写代码更简单,不用直接操作SQL语句。 现在我们就要实…...
《C++ Primer Plus》第18章:探讨 C++ 新标准(7)
C11 新增的其他功能 C11 增加了很多功能,本书无法全面介绍;另外,本书编写期间,其中很多功能还未得到广泛实现。然而,有些功能有必要简要地介绍一下。 并行编程 当前,为提高计算机性能,增加处…...
Redis学习(二):Redis安装测试
概述 Redis是什么 Redis, Remote Dictionary Server, 即远程字典服务。免费开源的数据库。 由C语言编写,支持网络,可基于内存亦可持久化的日志型、KV数据库,并提供所种语言的API。 Redis能干嘛 用于内存存储,持久化。rdb、ao…...
Vector - CAPL - 简介及数据结构
对于想进入车载行业或者已经在车载行业工作的朋友对于CAPL这个词都会相当的熟悉,都知道他是做车载网络测试脚本的语言,并且跟C有点类似,但是它到底是什么呢?CAPL全称(Communication Access Programming Language&#…...
20230304英语学习
What Would Happen if the Moon Disappeared Tomorrow? 如果明天月球消失了会怎样? 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练习也是相对简单的,只要能够理解解题的思路,并且依照这个思路能够快速的写出代码,我相信,你的链表水平已经足够了。 对于OJ练习(2) : ->传送门…...
【自用】SpringBoot项目通用类整理
文章目录全局Json序列化Controller日志切面全局异常拦截GlobalExceptionHandlerApiResultBusinessExceptionResponseEntityUtil全局返回体包装MP自动填充接口文档配置类自定义Async异步线程池本文主要整理各类项目中通用的配置类、工具类,便于复查自用。 全局Json序…...
动态规划法(总述)多阶段决策最优化问题
动态规划: 研究最优控制问题提出的 该问题有n个输入,问题的解由这n个输入组成,这个子集必须满足事先给定的条件,这些条件称为约束条件,满足约束条件的可行解可能不只有一个为了衡量可行解的优劣,通常以一些函数的形式&…...
MySQL跨服务器数据映射
MySQL跨服务器数据映射环境准备1. 首先是要查看数据库的federated引擎 开启/关闭 状态2. 打开任务管理器,并重启mysql服务3. 再次查看FEDERATED引擎状态,引擎已启动映射实现问题总结在日常的开发中经常进行跨数据库进行查询数据。 同服务器下跨数据库进…...
利用反射实现通过读取配置文件对类进行实例化-课后程序(JAVA基础案例教程-黑马程序员编著-第十二章-课后作业)
【案例12-3】:利用反射实现通过读取配置文件对类进行实例化 【案例介绍】 1.案例描述 现在有一个项目,项目中创建了一个Person类,在Person类中定义了一个sleep()方法。在工程中还定义了一个Student类继承Person类,在Student类中…...
1.2 CSS文本属性
CSS Text(文本)属性: 定义文本外观,颜色,装饰,缩进,行间距来修饰文本 文本样式 文本缩进 text-indent文本水平对齐方式:text-align文本修饰:text-decoration行高 line-height CSS文本颜色属性…...
SpringCloud之认识微服务
文章目录一、传统项目转型二、走进 SpringCloud三、微服务项目搭建3.1 创建一个 SpringBoot 项目3.2 创建三个 Maven 子工程3.3 为子工程创建 application.yml3.4 引入依赖3.5 数据库 建库建表3.6 编写业务提示:以下是本篇文章正文内容,SpringCloud系列学…...
【go语言之thrift协议二之server端分析】
go语言之thrift协议二serverthrift.TProtocolFactoryTTransportReadWriteCloserContextFlusherReadSizeProviderTProtocolrunServerNewTServerSocketNewCalculatorHandlerNewCalculatorProcessorNewTSimpleServer4server.ServeListenAcceptLoopprocessRequests在上一篇文章分析…...
【办公类05-03】Python批量修改文件名前面的序号(已有的序号错了,需要改成正确的号码)
背景需求下载教程,手动输入编号,有一个编号错误,导致后面所有编号都错了。30实际是29,以此类推怎样才能快速修改编号数字?前期考虑到可能要改编号,所以在每个编号后面加“ ”(空格)&…...
定向模糊测试工具Beacon基本用法
Beacon是一个定向模糊测试工具,给定行号,能够定向探索行号附近的代码区域。主要思想是采用静态分析的方法获取到与目标有关的变量的最弱前置条件(weakest precondition)的信息,并在相关位置插入断言,来提前…...
《程序员面试金典(第6版)》面试题 02.01. 移除重复节点
题目描述 编写代码,移除未排序链表中的重复节点。保留最开始出现的节点。 示例1: 输入:[1, 2, 3, 3, 2, 1] 输出:[1, 2, 3] -示例2: 输入:[1, 1, 1, 1, 2] 输出:[1, 2] 提示: 链表长度在[0, 20000]范…...
如何对web系统开展无障碍测试
Accessibility test(无障碍测试)是一种测试方法,旨在评估软件、网站或其他数字产品的可访问性,以确保它们能够被身体残障或其他特殊需求的用户使用。这些测试通常包括使用辅助技术,如屏幕阅读器和放大器,以…...
使用vite+vue3.0 创建一个cesium基础应用 ----01 项目搭建
使用vitevue3.0 创建一个cesium基础应用 ----01 项目搭建 1.使用yarn创建一个vite项目 我们可以在vite官网找到vite创建项目的命令 https://cn.vitejs.dev/ 可以使用yarn创建项目选择使用vue3.0框架,语言使用js 创建完成后结构如下: 2.找到vite社区中的…...
【Python学习笔记】第二十七节 Python 多线程
一、进程和线程进程:是程序的一次执行,每个进程都有自己的地址空间、内存、数据栈及其他记录运行轨迹的辅助数据。线程:所有的线程都运行在同一个进程当中,共享相同的运行环境。线程有开始、顺序执行和结束三个部分, …...
【id:18】【20分】B. DS顺序表--连续操作
题目描述建立顺序表的类,属性包括:数组、实际长度、最大长度(设定为1000)该类具有以下成员函数:构造函数:实现顺序表的初始化。插入多个数据的multiinsert(int i, int n, int item[])函数,实现在…...
vi编辑器操作指令分享
vi编辑器是所有Unix及Linux系统下标准的编辑器,它的强大不逊色于任何最新的文本编辑器,这里只是简单地介绍一下它的用法和一小部分指令。由于对Unix及Linux系统的任何版本,vi编辑器是完全相同的,因此您可以在其他任何介绍vi的地方…...
OSPF与BFD联动配置
13.1.1BFD概念 BFD提供了一个通用的、标准化的、介质无关的、协议无关的快速故障检测机制,有以下两大优点: 对相邻转发引擎之间的通道提供轻负荷、快速故障检测。 用单一的机制对任何介质、任何协议层进行实时检测。 BFD是一个简单的“Hello”协议。两个系统之间建立BFD会…...
做网站浏览器/seo优化技巧有哪些
相比java,scala的函数定义时可以设置参数的默认值。但在scala调用java方法时不可用,要遵循java语法。 需要在参数列表的参数声明后面加个默认值即可,如下图,tableName和etl_date的默认值分别为test和1225 //ss:SparkSession,sc:…...
郑州网站设计 郑州网站开发/建个网站费用多少
属于性价比比较高的扫地机器人了。① 外观方面:造型非常简洁,毕竟出自小米扫地机器人团队之手,设计理念都很符合小米,机身周围设计了很大一部分的碰撞缓冲器,对机身和更好的感应障碍物碰撞有很大作用,机身面…...
深圳网站建设黄浦网络-技术差/app下载免费安装
mysql中给一个用户授权如select,insert,update,delete等其中的一个或者多个权限,主要使用grant命令,格式为: 给没有用户授权 grant 权限 on 数据库对象 to 用户主机IP identified by 密码; 给已经存在的用户…...
建设一个怎样的自己的网站/网络营销方法有哪些举例
我叫张立新,喜欢音乐。在本次团队项目中担任后期测试人员转载于:https://www.cnblogs.com/Zlxz/p/7495130.html...
企业公司网站模板/做网上推广
最近做IM的时候遇到一个问题,同时用到了这三个关键字。就是查询一个人的离线消息详情,我们服务端返回给客户端显示的这个详情包括了三个内容,第一个要求列出离线这段时间哪些人或者群给你发了消息,第二个这其中的某个人或者群发了…...
免费搭建单页网站/百度网站检测
学习《Python核心编程》做一下知识点提要,方便复习。 计算机语言的本质是什么? a-z、A-Z、符号、数字等等组合成符合语法的字符串。供编译器、解释器翻译。字母组合后产生各种变化拿python来说就是。keyword。数值,类,函数&#…...