Python面向对象2-继承-

news2025/8/2 22:03:05

文章目录

  • 目标
  • 一. 继承的概念
  • 二. 单继承
  • 三. 多继承 [python又支持多继承了]
  • 四. 子类重写父类同名方法和属性 #TODO

目标

  • 继承的概念
  • 单继承
  • 多继承
  • 子类重写父类的同名属性和方法
  • 子类调用父类的同名属性和方法
  • 多层继承
  • super()
  • 私有属性和私有方法

一. 继承的概念

生活中的继承,一般指的是子女继承父辈的财产。

  • 拓展1:经典类或旧式类

不由任意内置类型派生出的类,称之为经典类。 [经典类 甚至连Object父类都没有了]

class 类名:
    代码
    ......
  • 拓展2:新式类
class 类名(object):
  代码

区别:

Python中类分两种:旧式类和新式类:
新式类都从object继承,经典类不需要。
新式类的MRO(method resolution order 基类搜索顺序)算法采用C3算法广度优先搜索,而旧式类的MRO算法是采用深度优先搜索
新式类相同父类只执行一次构造函数,经典类重复执行多次。

Python面向对象的继承指的是多个类之间的所属关系,即子类默认继承父类的所有属性和方法,具体如下:

# 父类A
class A(object):
    def __init__(self):
        self.num = 1

    def info_print(self):
        print(self.num)

# 子类B
class B(A):
    pass


result = B() # 继承了父类A的所有方法
result.info_print()  # 1

在Python中,所有新式类默认继承object类object类是顶级类或基类;其他子类叫做派生类。

二. 单继承

故事主线:一个煎饼果子老师傅,在煎饼果子界摸爬滚打多年,研发了一套精湛的摊煎饼果子的技术。师父要把这套技术传授给他的唯一的最得意的徒弟。

分析:徒弟是不是要继承师父的所有技术?

# 1. 师傅类
class Master(object):
    def __init__(self):
        self.kongfu = '[古法煎饼果子配方]'

    def make_cake(self):
        print(f'运用{self.kongfu}制作煎饼果子')

# 2. 徒弟类
class Prentice(Master):
    pass

# 3. 创建对象 daqiu
daqiu = Prentice()
# 继承了师傅的方法
daqiu.make_cake()  # 运用[古法煎饼果子配方]制作煎饼果子

三. 多继承 [python又支持多继承了]

故事推进:daqiu 是个爱学习的好孩子,想学习更多的煎饼果子技术,于是,在百度搜索,报班学习煎饼果子技术。

所谓多继承意思就是一个类同时继承了多个父类。

class Master(object):
    def __init__(self):
        self.kongfu = '[古法煎饼果子配方]'

    def make_cake(self):
        print(f'运用{self.kongfu}制作煎饼果子')

    def sayPlay(self):
        print("老师傅独有技能:唱戏曲")

class School(object):
    def __init__(self):
        self.kongfu = '[武大煎饼果子配方]'

    def make_cake(self):
        print(f'运用{self.kongfu}制作煎饼果子')

    def findWork(self):
        print('学校独有技能:找工作')



class Prentice(School,Master): # 多继承 同时继承2个类
    pass

daqiu = Prentice()
# 先是两位老师傅那分别学的独家技能
daqiu.sayPlay()
daqiu.findWork() 

# 再是共同的技能
daqiu.make_cake() # 默认使用第一个父类的同名属性和方法

在这里插入图片描述

注意:当一个类有多个父类的时候,默认使用第一个父类的同名属性和方法。

四. 子类重写父类同名方法和属性 #TODO

故事:daqiu掌握了师父和培训的技术后,自己潜心钻研出自己的独门配方的一套全新的煎饼果子技术。

class Master(object):
    def __init__(self):
        self.kongfu = '[古法煎饼果子配方]'

    def make_cake(self):
        print(f'运用{self.kongfu}制作煎饼果子')


class School(object):
    def __init__(self):
        self.kongfu = '[黑马煎饼果子配方]'

    def make_cake(self):
        print(f'运用{self.kongfu}制作煎饼果子')


# 独创配方
class Prentice(School, Master):
    def __init__(self):
        self.kongfu = '[独创煎饼果子配方]'

    def make_cake(self):
        print(f'运用{self.kongfu}制作煎饼果子')


daqiu = Prentice()
print(daqiu.kongfu)
daqiu.make_cake()

print(Prentice.__mro__)

子类和父类具有同名属性和方法,默认使用子类的同名属性和方法。

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

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

相关文章

实验(三):单片机I/O口实验-模拟开关灯

一、实验目的与任务 实验目的: 1.掌握单片机I/O口输入输出使用; 2.掌握单片机I/O口位操作的编程。 任务: 1.根据要求编写程序,并写出原理性注释; 2. 检查程序运行的结果,分析一下是…

VLAN和VLAN间路由

VLAN和VLAN间路由一 交换机二 vlan2.1 华为交换机的特性2.2 access接口2.2.1 在华为交换机上配置access接口2.2.2 access接口接收到报文的处理流程(打vlan tag)2.2.3 access接口发送报文的处理流程(剥离\弹出vlan tag)![在这里插入…

【仿牛客网笔记】项目进阶,构建安全高效的企业服务——权限控制

引入依赖 将登录检查拦截器删除掉 授权 首先显示路径 除了这些请求,其他的请求统统允许。 当权限不够处理的时候 返回XML是异步请求 添加denied的路径 获取用户权限的方法 将结果存入到集合中,实例化一个集合 获得用户权限,并把…

java框架学习笔记——SpringMVC

SpringMVC1. SpringMVC简介1.1 什么是MVC1.2 Spring MVC1.3 Spring MVC 的常用组件2. Hello SPring MVC2.1 基础配置2.2 总结3. RequestMapping注解3.1 功能3.2 位置3.3 value属性3.4 method属性3.5 params属性3.6 headers属性3.7 SpringMVC支持ant风格的路径3.8 SpringMVC支持…

数据中心网络方案设计

大家好,我是技福的小咖老师。 云计算、大数据、人工智能等技术的快速发展,对承载数据流量的数据中心网络提出了更高的要求,高吞吐量、高可靠性、低时延、适应服务器虚拟化等都是业务对数据中心网络提出的要求。为了满足业务对网络的要求&…

若依 弹出复选框表格

需求: 工资表用户应该可以弹框选择(弹窗选择用户表的id) 最后效果差不多这样: 步骤: 1.首先,先看我们需求啊, 工资表用户应该可以弹框选择 通过需求确认: 与这个需求关联的表有…

APS自动排产-AP工厂高级计划

安达发AP主要解决的问题: 客户交货需求:将销售订单、销售预测,同一转换为客户交货需求。生产净需求:考虑客户交货需求、当前库存、采购在途、生产在制、生产提前期、生产周期等,扣库存、展 BOM,最终产生产…

你知道数字化表单在防疫中的运用有哪些吗?

说到信息登记,很多人第一印象就是纸质化表格。但是随着科技发展,纸质化登记模式早已被out了。相比传统的纸质表格登记信息,现在普及的数字化表单登记模式有着更多的优势,例如:成本低、不宜丢失、打破了时间与地点限制&…

EasyCode的Mybatis终极版模板

EasyCode的Mybatis终极版距离我第一次上手EasyCode已经有一年的时间提醒一下,看这篇文章,如果你已经有EasyCode使用基础,只是来拿一下模板,可以直接看,如果你同时想知道知道到底怎么用easy code,请先看[Eas…

RabbitMQ初步到精通-第四章-RabbitMQ工作模式-Routing

第四章-RabbitMQ工作模式-Routing 1.模式介绍 1.1 模式 路由模式-继续还是和Exchange打交道,上节提到的Exchange类型为Fanout,此次声明的类型为direct 与默认Exchange一致。但还有最核心的一点,上节未使用Routing key,此次模式中…

SpringBoot实用开发篇复习3

我们之前学习了数据访问层的解决方案,包括关系数据库和非关系数据库,这一篇我们重点学校SpringBoot整合第三方技术,下面一起努力学习吧。 目录 一、整合第三方技术 1.1、缓存 1.1.1、缓存的作用 1.1.2、SpringBoot缓存使用方式 1.1.3、手…

C/C++自动 21 级(含卓越 211)《软件技术基础》期末大作业

C/C自动 21 级(含卓越 211)《软件技术基础》期末大作业 一、作业内容 题目一:请你设计一个算法,从顺序表中删除自第 i 个结点开始的 k 个结点。要求先输出整个顺序表,再输出删除自第 i 个结点开始的 k 个结点后的结果。 【编程提示】 假设…

高性能计算(HPC)存储高校科研应用分析

育人为本,国之根本,高校从理论教学到实操教学,从教室到实验室,改变了传统的教学模式,以数据的力量塑造新技术型高科技人才。随着科研项目多元化与数据量的增多,对计算速度与存储空间的要求不断提升&#xf…

rae众筹首个新目标,Tinkering开发板来了~

编辑:OAK中国 首发:oakchina.cn 喜欢的话,请多多👍⭐️✍ 内容可能会不定期更新,官网内容都是最新的,请查看首发地址链接。 ▌前言 Hello,大家好,这里是OAK中国,我是助手…

安全进阶:SSH实验配置指导

实验拓扑 实验需求 完成PC及交换机的配置,使得PC能够通过SSH的方式登录到交换机。 实验步骤及配置 交换机完成基础配置 [SW] interface Vlanif 1 [SW-Vlanif1] ip address 192.168.1.100 24简单起见,我们就直接使用VLAN1与PC对接,因此将交…

[附源码]java毕业设计企业物资信息管理系统

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

基于Simulink模拟具有两个目标的双基地雷达(附源码)

目录 一、示例 二、发射机 三、目标 四、接收机 五、结果和显示 六、总结 七、程序 此示例演示如何仿真具有两个目标的双基地雷达系统。双基地雷达的发射器和接收器不位于同一位置,而是沿着不同的路径移动。 一、示例 以下模型显示了双基地雷达系统的端到…

Failed to connect to any host resolved for DNS name第一次测试Redis/Jedis时报错(虚拟机)

有很多方法都会导致报这个错,后面提,先说解决方案 0. 尝试重启Redis,再运行测试代码 1. 检查配置文件环节 1⃣️是否设置后台启动(设置为yes) 2⃣️检查是否设置运行远程访问 这一步需要注意两个地方 注释掉bind和将protected-mode设置为…

项目八 51单片机WIFI控制继电器

前言:作者想要帮助一些童鞋和爱好者进行项目构建,但自知能力有限,不喜可论,创作不易,勿喷。 系统由STC89C51单片机、4路继电器、wifi esp8266模块及电源组成。 可以说是一个非常简单的设计,但这里我来说明…

(六)笔记.net core学习之泛型、逆变/协变、泛型缓存

1.泛型:延迟声明:不指定参数类型,调用是才指定,把参数类型的声明推迟到调用 2.泛型包含:泛型类、泛型方法、泛型接口、泛型委托、逆变/协变、泛型缓存 3.泛型约束 1.接口约束 Where T : 接口 2.基类约束 Where…