day21 面向对象之继承和组合

继承

组合

 

OOP的三大特征之一:封装,继承,多态

继承

什么是继承?

# 继承是一种关系,描述两个对象之间,什么是什么的关系
  例如:麦兜,佩奇,猪刚鬣 都是猪啊,
# 在程序中,继承描述的是类和类之间的关系例如:a继承了b, a就能直接使用b已经存在的方法和属性,a称之为子类,b称之为父类,也称之为基类

为什么要使用继承?

# 继承的一方可以直接使用被继承一方已经有的东西其目的是为了重用已经有的代码,提高重用性

如何使用继承?

语法:
class
类名称(父类的名称):类的内容 #在python中 一个子类可以同时继承多个父类

基本语法

class Base:bsec = '这是一个基类'def msg(self):print(self.bsec)def make_money(self):print('一天一个小目标')class SubBase(Base):passsub = SubBase()  #少了一个括号
sub.make_money()
# TypeError: make_money() missing 1 required positional argument: 'self'
print(sub.bsec)  # sub.msg()

 

 

正确的使用继承:

# 1.先抽象在继承
# 2.继承一个已经现存的类,扩展或是修改原始的功能

附:关于抽象
# 不具体,不清晰,很模糊,看不懂
# 将多个子类中相同的部分,进行抽取,形成一个新的类,这个过程也称之为抽象的过程
正确的使用继承:

属性的查找顺序:

class A:
text = "haha"class B(A):
text = "heihei"
passb = B()
b.text = "xixi"print(b.text)

# 对象自己的 - > 所在类中 -> 找父类 - >父类的父类 ->Object

继承相关术语:

# 派生:
  当一个子类中出现了与父类中不同的内容时,这个子类就称之为派生类通常子类都会写一些新的代码,不可能和父类完全一样,既通常都是派生类,所以派生类指的就是子类# 覆盖:
  也称之为重写 overrides当子类出现了与父类名称完全一致的属性或是方法

练习:

实现一个可以限制元素类型的容器 (字典,列表,元组,集合,字符串)

子类中访问父类的内容:

语法:
方式1: super(当前类名称,self).你要调的父类的属性或方法 方式2: super().你要调的父类的属性或方法 方式3: 类名称.你要调的父类的属性或方法(self)
#方式3与继承无关

强调再强调:

# 当你继承一个现有的类,并且你覆盖了父类的init方法时,必须在初始化方法的第一行调用父类的初始化方法,并传入父类所需的参数

 

组合

# 也是一种关系,描述两个对象之间 是什么有什么的关系
例如,学生有手机 ,游戏中角色拥有某些装备
将一个对象作为另一个对象的属性,(既什么有什么)

 组合的目的:

# 也是为了重用现有代码
什么时候使用继承:分析两个类的关系,到底是不是:什么是什么的关系
什么时候使用组合:如果两个类之间 没有太大的关系,完全不属于同类
另外组合相比继承,耦合度更低了

了解知识点

## 菱形继承

# 首先明确python支持多继承

补充:新式类与经典类python3中任何类都是直接或间接继承了Object
新式类,任何显式或隐式地继承自object的类就称之为新式类, python3中全都是新式类
经典类,既不是Object的子类 ,仅在python2中出现# 当出现了菱形继承时,新式类,先深度,当遇到了共同父类时就广度新式类,就是深度优先

 

# 小结:

1.继承是什么2.为什么用继承3.语法4.先抽象在继承6.派生7.覆盖8.子类访问父类的属性或方法 super ().名字​    如果你继承一个已有的类,并且你覆盖了init 一定要先调用父类的init9.继承的原理,mro列表10,新式类与经典类11.菱形继承 了解12,属性的查找顺序

 

转载于:https://www.cnblogs.com/Ryan-Yuan/p/11246991.html

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

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

相关文章

3.2_ 2_ 请求分页管理方式

3.2_ 2_ 请求分页管理方式 文章目录3.2_ 2_ 请求分页管理方式知识总览页表机制缺页中断机构地址变换机构知识回顾知识总览 页表机制 缺页中断机构 地址变换机构 知识回顾

安装 ssh 的公开密匙到 iPhone 上

1). 在Mac的终端上产生密匙 ssh-keygen -t rsa Generating public/private rsa key pair. Enter file in which to save the key (/home/xxxx/.ssh/id_rsa): Created directory /home/xxxx/.ssh. Enter passphrase (empty for no passphrase): xxx Enter same passphrase again…

[KMP]一本通(http://ybt.ssoier.cn:8088) 1698:字符串匹配

字符串匹配 【题目描述】 对于一个字符集大小为C的字符串pp,可以将任意两个字符在p中的位置进行互换,例如p12321,交换1、21、2得到21312,交换1、4得到42324,交换可以进行任意次。若交换后p变成了字符串q,则…

java后端面试笔记-自用

实习准备都准备什么? JAVA后端春招准备方向 面试视频 程序员面试一个Java实习生,展示教科书般回答,有两个大厂offer的他会来么? 迭代器 探讨迭代器中为什么不能通过集合的方式删元素而是使用迭代器中的remove()方法经行删除 反…

​两院院士评选“2021年中国/世界十大科技进展新闻”揭晓

来源:科学网由中国科学院、中国工程院主办,中国科学院学部工作局、中国工程院办公厅、中国科学报社承办,中国科学院院士和中国工程院院士投票评选的2021年中国十大科技进展新闻、世界十大科技进展新闻于2022年1月18日在京揭晓。此项年度评选活…

脑机综述(一) | 脑机接口在康复医学中的应用进展

来源:《中国康复医学》杂志 、臻泰智能论文《脑机接口在康复医学中的应用进展》琚芬1,赵晨光1,袁华1,牟翔1,王冰水2【关键词】 脑机接口;运动功能…

SpringBoot-短信验证码-快速入门Demo(含redis)(手把手教你开通阿里云短信服务到写出个最终代码来)

B站小狂神-此博客的内容就是看了这个视频的总结(博主自己写的哦~并非转载) 视频链接-【狂神说】通俗易懂的阿里云短信业务实战教程(露脸) 您是否还在为别人的项目有短信功能自己的却没有? 您是否还在为自己的项目没有短…

Bresenham快速画直线算法

现在的计算机的图像的都是用像素表示的,无论是点、直线、圆或其他图形最终都会以点的形式显示。人们看到屏幕的直线只不过是模拟出来的,人眼不能分辨出来而已。那么计算机是如何画直线的呢,其实有比较多的算法,这里讲的是Bresenha…

国产光刻机正式宣布:今年出货150台

来源:世界先进制造技术论坛在芯片领域,有一个叫光刻机的设备,不是印钞机,但却比印钞机还金贵。全球只有荷兰一家叫做阿斯麦(ASML)的公司集全球高端制造业之大成,一年时间造出二十台高端设备&…

junit单元测试,反射,注解

今日内容 1. Junit单元测试 2. 反射 3. 注解Junit单元测试: * 测试分类:1. 黑盒测试:不需要写代码,给输入值,看程序是否能够输出期望的值。2. 白盒测试:需要写代码的。关注程序具体的执行流程。* Junit使…

OIS几个重要的类的使用

一 OIS的简介: OIS有很多的类,头文件也10多个,很多人一到就蒙了,其实不然,虽然头文件很多,但是都很简单。 #include "OIS.h" 包含了所有用到的头文件,使用OIS时&#xff0c…

元宇宙的“42条共识”

来源: 量子学派*以下内容、图片综合自《图说元宇宙》《设计元宇宙》系列01元宇宙不是一天建成的罗马不是一天建成的,元宇宙也一样。人类从未像今天这样,可以自己成为“创世主”。元宇宙融合了信息技术(5G/6G)、互联网时…

struts2被淘汰的原因

Struts2是一个基于MVC设计模式的Web应用框架,它本质上相当于一个Servlet。在MVC设计模式中,Struts2作为控制器(Controller)来建立模型与视图的数据交互。Struts2是Struts的下一代产品,是在Struts1和WebWork的技术基础上进行了合并的全新的Str…

手把手教你用java读写excel表格文件(POI,EasyExcel)

视频链接-我是学习之星我为狂神打call~ 【狂神说Java】POI及EasyExcel一小时搞定通俗易懂 想给项目添加一个表格导入导出功能吗? “xxx管理系统”没有导入导出功能逼格不够了? 想简单入手下 how to 用java 生成excel又找不到合适的教程? com…

欢迎参加2022年第一次《城市大脑建设标准规范》专家研讨会

来源:世界数字大脑标准研究组2018年以来,城市大脑正成为智慧城市和智能产业的新热点,有近500个城市提出城市大脑的建设规划,数千家大中型科技企业进入城市大脑的建设领域。如何理清城市大脑的概念和定义,制定统一的城市…

面试问题

什么是闭包?1. 当一个内部函数被调用,就会形成闭包,闭包就是能够读取其他函数内部变量的函数定义:闭包是能够读取其他函数内部变量的函数,在js中,只有函数内部的子函数才能读取局部变量,所以闭包…

Spring常用注解的讲解

转载,原文链接 作者:字母哥博客 本文出自:springboot深入浅出系列 文章目录一、常用注解回顾1.1 RequestBody与ResponseBody1.2. RequestMapping注解1.3. RestController与Controller1.4. PathVariable 与RequestParam二、接收复杂嵌套对象参…

复杂系统与人工生命:十年研究概览

来源:集智俱乐部作者:Thomas McAtee、Claudia Szabo译者:陈翔 审校:刘培源编辑:邓一雪导语人工生命(artificial life)是通过仿真建模、机器技术和生物化学等方式模拟自然生命系统,进…

day22-面向对象之封装

# 封装 什么是封装? # 就是将复杂的丑陋的,隐私的细节隐藏到内部,对外提供简单的使用接口 # 对外隐藏内部实现细节,并提供访问的接口 为什么需要封装? ​ # 两个目的 ​ 1.为了保证关键数据的安全性 ​ 2.对外部隐藏实现细节,隔离复杂度 什么时候应该封装? #​ 当有一些数据…

5.1传输层概述

5.1传输层概述 文章目录传输层概述传输层的两个协议传输层的寻址与端口传输层概述 传输层的两个协议 传输层的寻址与端口