作者:邹冲

链接:https://www.zhihu.com/question/19754936/answer/202650790

来源:知乎

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

写东西的时候刚好遇到这个问题,回答一波……

继承 object 类的是新式类,不继承 object 类的是经典类,在 Python 2.7 里面新式类和经典类在多继承方面会有差异:

class A:

def foo(self):

print('called A.foo()')class B(A):

passclass C(A):

def foo(self):

print('called C.foo()')class D(B, C):

passif __name__ == '__main__':

d = D()

d.foo()

B、C 是 A 的子类,D 多继承了 B、C 两个类,其中 C 重写了 A 中的 foo() 方法。

如果 A 是经典类(如上代码),当调用 D 的实例的 foo() 方法时,Python 会按照深度优先的方法去搜索 foo() ,路径是 B-A-C ,执行的是 A 中的 foo() ;

如果 A 是新式类,当调用 D 的实例的 foo() 方法时,Python 会按照广度优先的方法去搜索 foo() ,路径是 B-C-A ,执行的是 C 中的 foo() 。

因为 D 是直接继承 C 的,从逻辑上说,执行 C 中的 foo() 更加合理,因此新式类对多继承的处理更为合乎逻辑。

在 Python 3.x 中的新式类貌似已经兼容了经典类,无论 A 是否继承 object 类, D 实例中的 foo() 都会执行 C 中的 foo() 。但是在 Python 2.7 中这种差异仍然存在,因此还是推荐使用新式类,要继承 object 类。

python所有的父类_object代表所有类的父类吗??相关推荐

  1. Class文件结构介绍[访问标志,类索引,父类索引,接口索引集合]

    访问标志   在常量池结束后,紧接着的两个字节代表访问标志(access_flags),这个标志用于识别一些类或者接口层次的访问信息,包括:这个Class是类还是接口,是否定义为public类型,是否 ...

  2. python用于标识类方法的是_Python类的设计与使用

    28 类的基础--设计.使用 上一章说过,类是事物功能和属性的抽象,对象是类的实例化.就像人人都知道小汽车可以干什么什么的,但光想小汽车如何好是没有用的,得开车或坐才能感受到小汽车的好.人脑里的小汽车 ...

  3. Python的面向对象,魔术方法、类的三大特征、自省、实例空间、经典类与新式类

    目录 1.什么是面向对象 1.1 面向过程 1.2 面向对象 1.3 面向对象的优点 2.类 2.1 什么是类.对象,方法和属性 2.2 类的定义和使用 2.2.1 类名规范和类的写法 2.3 魔术方 ...

  4. Python零基础速成班-第9讲-Python面向对象编程(上),对象和类、初始化、继承、重写、多态、类方法、组合

    Python零基础速成班-第9讲-Python面向对象编程(上),对象和类.初始化.继承.重写.多态.类方法.组合 学习目标 修饰器 面向对象编程:对象和类.初始化.继承.重写.多态.类方法.组合 课 ...

  5. Python之路-面向对象继承和多态类属性和实例属性类方法和静态方法

    一.面向对象 编程方式 面向过程:根据业务逻辑从上到下写垒代码 函数式:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可 面向对象:对函数进行分类和封装,让开发"更快更好更强-& ...

  6. Java反射机制demo(四)—获取一个类的父类和实现的接口

    2019独角兽企业重金招聘Python工程师标准>>> Java反射机制demo(四)-获取一个类的父类和实现的接口 1,Java反射机制得到一个类的父类 使用Class类中的get ...

  7. python中类方法与实例方法的区别-Python中的对象,方法,类,实例,函数用法分析...

    本文实例分析了Python中的对象,方法,类,实例,函数用法.分享给大家供大家参考.具体分析如下: Python是一个完全面向对象的语言.不仅实例是对象,类,函数,方法也都是对象. class Foo ...

  8. (反射):获取一个类的父类和父类的泛型

    一.解决问题 获取一个类的父类和父类的泛型 二.实现 Student.java package Test3;public class Student {private String name;priv ...

  9. 双继承_在Python中使用双下划线防止类属性被覆盖!

    在使用Python编写面向对象的代码时,我们会常常使用"继承"这种开发方式.例如下面这一段代码: class Info:def __init__(self):passdef cal ...

最新文章

  1. React 组件生命周期
  2. 基于jquery的serializeArray
  3. python自带intertool模块找不到_介绍Python中内置的itertools模块
  4. jzoj1166-树中点对距离【点分治】
  5. Codeforces Round #533 (Div. 2) C.思维dp D. 多源BFS
  6. Python 中的黑暗角落(一):理解 yield 关键字
  7. 玩转 SpringBoot 2 快速整合 | 丝袜哥(Swagger)
  8. create-react-app脚手架中配置webpack的方法
  9. 3. Magento 模板制作
  10. android中获取 bitmap 像素的颜色 之吸管取色功能
  11. thinkpadt410接口介绍_thinkpad T410的扩展插口!
  12. 支付公司如何赚钱?支付网关如何设计?
  13. Unity 跑马灯效果
  14. 海义QQ群共享下载者的一些图例使用步骤教程
  15. 消息中心(系统消息)实现
  16. WinRAR压缩时排除文件或目录
  17. Java内存模型(JMM的原理和介绍)
  18. 用matlab实现任意点图片的旋转_Matlab实现图像旋转
  19. 将算术表达式((a+b)+c*(d+e)+f)*(g+h) 转化为二叉树。并分别写出对该二叉树进行 先序、中序、后续和层次遍历得到的结果
  20. 成功解决:双击eclispe安装文件后没反应

热门文章

  1. Java Iterator到Java 8 Stream
  2. 如何在Java中使用重复项查找整数数组中的K个缺失数字?
  3. JavaFX技巧29:使布局忽略不可见的节点
  4. java集合提取最小的日期_提取Java集合的元素-Java 8方法
  5. nosql怎么使用_使用NoSQL实施实体服务–第5部分:使用云提高自治性
  6. 如何以及何时使用枚举和注释
  7. 内存中数据模型和大数据持久性
  8. 在Spring中记录JAX-WS SOAP消息
  9. 使用Jasmine,Spock和Nashorn测试JVM服务器端JavaScript
  10. 在嵌入式Neo4j中使用Neo4j浏览器