python基础17 ---继承补充知识
一、继承的顺序
1、在python中的类可以集成多个类,既然是继承多个类就有类的寻找顺序这么一说。其寻找方法就有广度优先和深度优先两种。
2、当类是新式类,多继承的情况下会按照广度优先的顺序查找。
如图:

当H这个类是新式类也就是说它的父类中有object这个类,那么他要查找某个属性,会先从自己的类中查找,如果没有再查找父类的,查找顺序为:H->E->B->F->C->G->D->A。注意父类A是最后查找的,所以说他是广度优先。
当H这个类是经典类也就是说它的父类中没有object这个类,那么他要查找某个属性,会先从自己的类中查找,如果没有再查找父类的,其查找顺序为:H->E->B->A->F->C->G->D。注意父类D是最后查找的,所以说他是深度优先。
以上两种查找属性的情况是建立在他们的父类的父类是同一个类的前提下,如果没有同一个类这么一说那么他们的查找顺序都是广度优先。如果是新
式类的情况下可以用类名.mro()的方式查看继承的顺序。二、子类中调用父类的方法图1

如图1:以前子类调用父类的属性时是指名道姓的查找父类的属性,这样就么有了继承的顺序这么一说了。

如图二、现在调用父类方法直接是用一个super()对象来直接调用父类的__init__方法,对象和函数属性之间是绑定方法的关系,
默认会自动传参,因此不用写self本身。这样就遵循了继承的顺序查找的方法。 注意:在python2中也有super()方法,
但是格式为:super(类名,self)
二、封装
1、为什么要封装?
封装不是单纯意义上的隐藏,封装数据的主要原因是为了保护数据,封装方法的主要原因是为了隔离复杂度。
2、封装分为两个层面
2.1第一个层面的分装(什么都不用做):创建类和对象会分别创建他们的名称空间,我们只能用类或者对象.的方式去访问里
面的数据属性或者是函数属性,这本身就是一种封装。
2.2第二个层面的封装:就是把类里面的某些属性和方法隐藏起来,或者说是定义成私有的只能在内部使用,外部无法使用,或者
说是留下少量接口供外部访问。在python3中用双下划线就可以实现封装。
2.3封装其实分为两个层面,但无论哪种层面的封装,都要对外界提供好访问你内部隐藏内容的接口(接口可以理解为入口,有了
这个入口,使用者不能够直接访问到内部隐藏的细节,只能走接口,并且我们可以在接口的实现上附加更多的处理逻辑,从而严格控
制使用者的访问)
3、如图: 图一 图二


3.1类的封装式在类的定义阶段就已经封装好了的,所以可以在类的内部使用,但是如果在类的外部实例化产生对象后再对类的
内部做分装操作会失败。
3.2封装后的类在外部无法直接使用类内部的属性,使用格式为:对象._封装后的属性的类__封装后的属性。
3.3在子类定义的__x不会覆盖在父类定义的__x,因为子类中变形成了:_子类名__x,而父类中变形成了:_父类名__x,即双下滑线开头的属性在继承给子类
时,子类是无法覆盖的。如下图所示:
三、property特性
1、如图1 图2


如图1默认情况下想要知道egon的名字需要用对象调用tell_name这个函数,即(egon.tell_name()),在现实生活中name是个名词调用它不应该用加()的方式执行,给用户的感觉就好像是调用了个函数,所以引用了property这个可调用对象,把函数属性变为数据属性,如图二就可以调用该属性了,为了更能符合用户需求,return 这个打印的值。
2、如图

2.1当函数被property装饰后,返回的结果相当于一个数据数学,可直接调用该函数名就能实现其功能,装饰后的函数还自动附带了
增删改的属性,调用它就可以使用了
python基础17 ---继承补充知识的更多相关文章
- 二十二. Python基础(22)--继承
二十二. Python基础(22)--继承 ● 知识框架 ● 继承关系中self的指向 当一个对象调用一个方法时,这个方法的self形参会指向这个对象 class A: def get(s ...
- 十七. Python基础(17)--正则表达式
十七. Python基础(17)--正则表达式 1 ● 正则表达式 定义: Regular expressions are sets of symbols that you can use to cr ...
- day2 python基础 while 循环补充
一.上节内容回顾 二.pycharm安装. 安装好以后激活方法:直接打开pycharm,选License server激活,输入:http://idea.imsxm.com 三.补充知识:如果字符串本 ...
- Python基础、collections补充
collections collections是Python数据类型的补充,可以实现Counter计数.可命名元组(namedtuple).默认字典.有序字典.双向队列等功能 参考:http://py ...
- python基础之继承实现原理、子类调用父类的方法、封装
继承实现原理 python中的类可以同时继承多个父类,继承的顺序有两种:深度优先和广度优先. 一般来讲,经典类在多继承的情况下会按照深度优先的方式查找,新式类会按照广度优先的方式查找 示例解析: 没有 ...
- python基础之继承派生、组合、接口和抽象类
类的继承与派生 经典类和新式类 在python3中,所有类默认继承object,但凡是继承了object类的子类,以及该子类的子类,都称为新式类(在python3中所有的类都是新式类) 没有继承obj ...
- Python基础之继承与派生
一.什么是继承: 继承是一种创建新的类的方式,新建的类可以继承一个或过个父类,原始类成为基类或超类,新建的类则称为派生类 或子类. 其中,继承又分为:单继承和多继承. class parent_cla ...
- python基础之继承组合应用、对象序列化和反序列化,选课系统综合示例
继承+组合应用示例 1 class Date: #定义时间类,包含姓名.年.月.日,用于返回生日 2 def __init__(self,name,year,mon,day): 3 self.name ...
- Python 基础:入门必备知识
前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理.作者:程序员野客 先看下咱们的基础目录1 标识符2 关键字3 引号4 编码5 ...
随机推荐
- SQL语句练习手册--第二篇
一.书到用时方恨少:"图书-读者-借阅"类题目 1.1 本题目的表结构 本题用到下面三个关系表: CARDS 借书卡. CNO 卡号,NAME 姓名,CLASS 班级 BOOKS ...
- 【BIEE】09_BIEE控制台乱码问题解决
BIEE安装完成后,点击[启动BI服务] 接着从弹出窗口可以发现,全部汉字都是乱码 出现这种情况,想看一下BIEE启动情况是很费劲的,接着我们处理一下这个问题 1.从路径D:\obiee\user_p ...
- (四)Thymeleaf标准表达式之——[3->6] 操作符(文本、算术、布尔、比较及相等)
2.3 文本操作符 模板名称:text.html 连接符: + 可以是任意字符和表达式等 文本替换符:| 不能表达出条件表达式(官网:只能是变量表达式) e.g. 1.<span th ...
- shell脚本检测网络是否畅通
shell初始化安装脚本执行时,需从网络上安装一些rpm包,所有需要先检测网络的畅通性, 代码 #检测网络链接&&ftp上传数据 function networkAndFtp() { ...
- fastjson List<> 转Json , Json 转List<>
SerializeWriter:相当于StringBuffer JSONArray:相当于List<Object> JSONObject:相当于Map<String, Object& ...
- [译]GLUT教程 - 弹出菜单基础
Lighthouse3d.com >> GLUT Tutorial >> Pop-up Menus >> Popup Menus 弹出菜单也是GLUT的一部分.虽然 ...
- PyCharm搭建Spark开发环境 + 第一个pyspark程序
一, PyCharm搭建Spark开发环境 Windows7, Java 1.8.0_74, Scala 2.12.6, Spark 2.2.1, Hadoop 2.7.6 通常情况下,Spark开发 ...
- 【Mac + Pycharm】之实用东西以及配置东西
一.新建.py文件时默认模板: 步骤:File => Preferences for New Projects => Editor => File and Code Template ...
- windows svchost.exe 引起的出现的莫名其妙的窗口失去焦点
我不知道你们遇到没,反正我是遇到了,现在我就把解决方法给你们,当然都是从网上整理下来的 这个失去焦点可以分为两种,一种是病毒,一种是系统自带的问题 首先你得知道自己的窗口被什么给挤掉了焦点 先看看这篇 ...
- UFLDL深度学习笔记 (六)卷积神经网络
UFLDL深度学习笔记 (六)卷积神经网络 1. 主要思路 "UFLDL 卷积神经网络"主要讲解了对大尺寸图像应用前面所讨论神经网络学习的方法,其中的变化有两条,第一,对大尺寸图像 ...