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 ...
随机推荐
- Centos修改文件打开数限制
一.查看系统限制最大打开数 cat /proc/sys/fs/file-max 还有一个问题是file-max最大能设置多大呢?一个经验算法是 256个fd 需4M内存.例如8G内存,8*1024/4 ...
- 借助backtrace和demangle实现异常类Exception
C++的异常类是没有栈痕迹的,如果需要获取栈痕迹,需要使用以下函数: #include <execinfo.h> int backtrace(void **buffer, int size ...
- C语言中使用库函数解析命令行参数
在编写需要命令行参数的C程序的时候,往往我们需要先解析命令行参数,然后根据这些参数来启动我们的程序. C的库函数中提供了两个函数可以用来帮助我们解析命令行参数:getopt.getopt_long. ...
- ESXi安装iso镜像添加驱动(esxi6.5,6.7)
准备工作:1.安装 Windows PowerShell 3.0 (需要启用Windows AutoUpdate服务,安装完毕计算机需要重启) https://www.microsoft.com/en ...
- quick-cocos2d-x3.2 scheduler使用注意事项
近期在使用scheduler时发现例如以下问题 调用: local scheduler = require(cc.PACKAGE_NAME .. ".scheduler") fun ...
- IIS8应用池重启脚本
重启 IIS8 应用程序池的批处理 批处理很简单:c:\windows\system32\inetsrv\AppCmd.exe stop apppool /apppool.name:"ASP ...
- 【问题记录】web项目访问时出现404
请一定检查一下项目的Context root是否是你访问时使用的. Context root设置为/时,可以直接用ip+端口访问. Context root设置为项目名的,访问时请带上项目名. 设置方 ...
- linux实用命令备忘
1. 卸载旧内核 sudo apt-get purge linux-image-xxx-xx-generic 2. 快速换ubuntu的源: sudo sed -i 's/vivid/wily/' / ...
- 《TomCat与Java Web开发技术详解》(第二版) 第三章节的学习总结--利用Context元素来自定义web应用的存储位置
在学习完第三章后(第三章提供的web应用是helloaapp,我将其放到了tomcat/webapps中),对Context元素的作用理解不深:但是当进入第四章后,发现第四章提供的源码包中也有一个叫h ...
- 内核源码之Kconfig和Makefile
转自:http://www.cnblogs.com/image-eye/archive/2011/08/28/2156005.html 内核源码之Kconfig和Makefile Linux内核源码树 ...