经典类

1.什么是经典类

就是在使用class关键词时,括号内不添加object类的就叫经典类,前面的博文里是绝对解析过的,所以你应该知道,经典类现在已经仅存在于python2了,因为python3不管你给没给object都会自动继承object类,其采用MRO算法深度优先搜索。Python 2.x中默认都是经典类,只有显式继承了object才是新式类

例:

像这种,如果不给object生成的类只有自己的属性方法,加上一个文档属性__doct__,一个模块方法__module__

2.特性:深度优先

什么叫深度优先,当多重继承时,会按照父类线路优先继承,如果父类不存在,再最后按照其他线路继承,什么意思呢?看个例子吧

C类同时继承了A和B,但是name属性的结果却是A的name属性,那如果C也有name属性呢?

自然,这个是没什么问题的吧?子类继承父类时,如果子类与父类有相同属性,子类的属性会覆盖父类的属性,这个大家都知道吧?

那如果再多一个父类继承呢?

什么情况?分析一下,C类同时继承了A和B,A又继承与P,C的name属性却是P类的name属性值,像这种就是深度优先,这就是经典类的特性,画个图解释下:

C类因为同时继承了A和B,所以就有两条线路走,C—>A—>P和C—>B,但是优先级更高的是以纵向继承的前者,所以会继承P的name属性

不过还要注意一个情况

它还是优先纵向继承

新式类

1.什么是新式类

就是在使用class关键词创建类时,给定了继承object基类的就叫新式类。其采用C3算法广度优先搜索。Python 3.x中默认都是新式类,经典类被移除,不必显式的继承object。新式类对象可以直接通过__class__属性获取自身类型:type。例:

和前面经典类做对比,很明显的,继承类object类的属性和方法都很多

2.特性:广度优先

什么叫广度优先,当多重继承时,会尽量避免深度继承,深度能浅一点就浅一点,如果实在无法解决,再最后按照父类的深度来继承,什么意思呢?看个例子吧

这么看好像和经典类的继承方式是一样的对吧?不急再加一层父类看看:

不多说,图解:

它的线路是C—>A—>B—>P和C—>A—>P和C—>B—>P,优先级最高的是前者,先横向查找,实在没有再纵向。

同样的,要注意一个情况:

当B类不继承P时,并且和P类都继承object时,在相同属性下不再遵守广度优先规则,而是一路纵向,得到的还是P类的name属性。这个情况很特殊,记住了。

洗礼灵魂,修炼python(43)--巩固篇—经典类/新式类的更多相关文章

  1. Python 中的经典类新式类

    Python 中的经典类新式类 要知道经典类和新式类的区别,首先要掌握类的继承 类的继承的一个优点就是减少代码冗余 广度优先和深度优先,这主要是在多类继承的时候会使用到 经典类和新式类的主要区别就是类 ...

  2. 继承 派生 super()经典类 新式类

    '''1什么是继承? 继承一种新建类的方式,在python中支持一个儿子继承多个爹 新建的类称为子类的或者派生类 父类有可以称为基类或者超类 子类会‘遗传’父类的属性 2 为什么要用继承 减少代码冗余 ...

  3. python之继承、抽象类、新式类和经典类

    一.上节补充1.静态属性静态属性 : 类的属性,所有的对象共享这个变量 如果用对象名去修改类的静态属性:在对象的空间中又创建了一个属性,而不能修改类中属性的值 操作静态属性应该用类名来操作 例1:请你 ...

  4. 面向对象:继承(经典类&新式类继承原理、属性查找)、派生

    继承: 继承是指类与类之间的关系,是一种“什么”是“什么”的关系. 继承的功能之一就是用来解决代码重用问题 继承是一种创建新类的方式,在Python中,新建的类可以继承一个或多个父类,父类又可以称为基 ...

  5. Python 学习 —— 进阶篇(装饰器、类的特殊方法)

    Python基础部分学完之后,在进入其OOP部分前,先理解一下其装饰器这种结构,其功能可类比于Java中的面向切面编程,下面参见具体实例: def log(f): def fn(x): print ' ...

  6. 【python】-- 类的多继承、经典类、新式类

    继承知识点补充 在python还支持多继承,但是一般我们很少用,有些语言干脆就不支持多继承,有多继承,就会带来两个概念,经典类和新式类. 一.多继承 之前我们都是讲的单继承,那么什么是多继承呢?说白了 ...

  7. 【Python】Python 新式类介绍

    本文转载自:kaka_ace's blog 我们使用 Python 开发时, 会遇到 class A 和 class A(object) 的写法, 这在 Python2 里是有概念上和功能上的区别, ...

  8. 面向对象【day07】:新式类和经典类(八)

    本节内容 1.概述 2.类的多继承 3.经典类VS新式类 4.总结 一.概述 在python还支持多继承,但是一般我们很少用,有些语言干脆就不支持多继承,有多继承,就会带来两个概念,经典类和新式类,下 ...

  9. Python3学习之路~6.7 经典类和新式类的继承顺序

    在Python中,经典类(class Person:)和新式类(class Person(object):)的主要区别就是体现在多继承的顺序上. Python 2.x中默认都是经典类,只有显式继承了o ...

随机推荐

  1. 解决tomcat启动慢问题

    启动慢修改如下: 在catalina.sh中加入这么一行: JAVA_OPTS="-Djava.security.egd=file:/dev/./urandom" 打开$JAVA_ ...

  2. 【Redis面试题】Redis的字符串是怎么实现的?

    年前本人在找工作面试时在Redis相关问题上可栽了跟头.在面试前按常规套路准备了一下,比如 Redis 的常用5种数据结构,Redis持久化策略,Redis实现分布式锁,简单发布订阅等等都准备了,当时 ...

  3. 【xsy2332】Randomized Binary Search Tree DP+FFT

    题目大意:给你一个$[0,1]$之间等概率随机序列,你需要把这个序列插入到一棵$treap$中,问这棵$treap$的期望深度,请对于$[1,n]$中的每个深度分别输出它的概率(实数,保留五位小数). ...

  4. [视频]K8飞刀无代码编程之生成EXP

    [视频]K8飞刀无代码编程之生成EXP 链接: https://pan.baidu.com/s/1CTBUpPrW3V8sHMd8yukZ8Q 提取码: ang7

  5. Orange——开源机器学习交互式数据分析工具

    Orange为新手和专家提供开源机器学习和数据可视化.使用大型工具箱交互式数据分析工作流程. 交互式数据可视化 Orange的全部内容都是关于数据可视化,帮助发现隐藏的数据模式,提供数据分析过程背后的 ...

  6. msql 必知必会笔记

    Edit Mysql 必知必会 第一章 理解SQL 什么是数据库 数据库(database) 保存有组织的数据的容器 什么是表  一组特定类型的数据的结构化清单 什么是模式  数据库和表的布局及特性的 ...

  7. Sharepoint 2010 工作流状态值

    在Sharepoint2010中,如果要使用工作流状态值进行筛选,必须使用内部值,不能使用文字,要不然是筛选不出来的. 进行中:2 已取消:4 已批准:16 拒绝:17 下边是已取消的工作流状态:

  8. DotNetCore学习-1.读取Json配置并绑定到配置类实例

    DotNetCore的程序的配置不再完全局限于XML文件,增加更加通用的Json配置. 读取Json配置文件的类主要在Microsoft.Extensions.Configuration命名空间下,创 ...

  9. C# .aspx 页面更换命名空间

    1.选中命名空间,右键单击,选择重构,之后选择重命名.如下图: 2.弹出重命名对话框 3.重写你需要的名字,点击确定. 4.这里重点注意了,不可直接点击应用,否则你会后悔的.你必须对应的看看那个是否是 ...

  10. R0~R16寄存器作用

    R0-R3     用作传入函数参数,传出函数返回值.在子程序调用之间,可以将 r0-r3 用于任何用途. 被调用函数在返回之前不必恢复 r0-r3.如果调用函数需要再次使用 r0-r3 的内容,则它 ...