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 ...
随机推荐
- Laravel之Elixir
一.Elixir安装和设置 1.安装node.js 2.安装Gulp 作为全局NPM 包 npm install --global gulp 3.最后,在新安装的Laravel 根目录下,你会发现有一 ...
- SQL语句练习手册--第三篇
一.CASE的两种用法 1.1 等值判断->相当于switch case (1)具体用法模板: CASE expression WHEN value1 THEN returnvalue1 WHE ...
- JavaScript对象浅复制
1.概述 Object.assign方法用于对象的合并,将源对象(source)的所有可枚举属性,复制到目标对象(target). 注意,如果目标对象与源对象有同名属性,或多个源对象有同名属性,则后面 ...
- 对于刚開始学习的人Xcode最经常使用的快捷键
对于刚開始学习的人而言,好多人都是直接使用鼠标进行操作.差点儿非常少使用快捷键,从而再练习编程时比别人慢那么一点,今天就把刚開始学习的人最经常使用的几个快捷键给大家总结下,当然欢迎大家补充. (1)c ...
- 程序员不修复BUG怎么办
在测试过程中,难免遇到开发人员因为一些原因不想修改个别bug的情况.遇到这种问题时,该如何去推进开发修改bug呢? 一.现状分析 1.开发人员为啥不愿意修复BUG? (1)开发与测试对bug的定义理解 ...
- Python 多线程和单线程本质应用区别
先了解下CPU的简单运行原理: 它运行速度非常快,1s内可以运行成千上万次,一个核心可以把1s切分成成千上万个时间片段,这个核心确实同时只能运行一个任务:但是可以将多个任务交替执行,比如上一个时间片段 ...
- php函数总结(闭包函数,匿名函数)
php函数总结 1.普通函数 2.变量函数 function myfun($a) { echo $a; } $b = "myfun"; $b("test"); ...
- hdu 1159(Common Subsequence)简单dp,求出最大的公共的字符数
Common Subsequence Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Other ...
- hadoop生态系统学习之路(八)hbase与hive的数据同步以及hive与impala的数据同步
在之前的博文中提到,hive的表数据是能够同步到impala中去的. 一般impala是提供实时查询操作的,像比較耗时的入库操作我们能够使用hive.然后再将数据同步到impala中.另外,我们也能够 ...
- 如何在struts2中实现下载?
<a href="${pageContext.request.contextPath}/download?filename="+filename>点击下载</a& ...