python所有的父类_object代表所有类的父类吗??
作者:邹冲
链接: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代表所有类的父类吗??相关推荐
- Class文件结构介绍[访问标志,类索引,父类索引,接口索引集合]
访问标志 在常量池结束后,紧接着的两个字节代表访问标志(access_flags),这个标志用于识别一些类或者接口层次的访问信息,包括:这个Class是类还是接口,是否定义为public类型,是否 ...
- python用于标识类方法的是_Python类的设计与使用
28 类的基础--设计.使用 上一章说过,类是事物功能和属性的抽象,对象是类的实例化.就像人人都知道小汽车可以干什么什么的,但光想小汽车如何好是没有用的,得开车或坐才能感受到小汽车的好.人脑里的小汽车 ...
- Python的面向对象,魔术方法、类的三大特征、自省、实例空间、经典类与新式类
目录 1.什么是面向对象 1.1 面向过程 1.2 面向对象 1.3 面向对象的优点 2.类 2.1 什么是类.对象,方法和属性 2.2 类的定义和使用 2.2.1 类名规范和类的写法 2.3 魔术方 ...
- Python零基础速成班-第9讲-Python面向对象编程(上),对象和类、初始化、继承、重写、多态、类方法、组合
Python零基础速成班-第9讲-Python面向对象编程(上),对象和类.初始化.继承.重写.多态.类方法.组合 学习目标 修饰器 面向对象编程:对象和类.初始化.继承.重写.多态.类方法.组合 课 ...
- Python之路-面向对象继承和多态类属性和实例属性类方法和静态方法
一.面向对象 编程方式 面向过程:根据业务逻辑从上到下写垒代码 函数式:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可 面向对象:对函数进行分类和封装,让开发"更快更好更强-& ...
- Java反射机制demo(四)—获取一个类的父类和实现的接口
2019独角兽企业重金招聘Python工程师标准>>> Java反射机制demo(四)-获取一个类的父类和实现的接口 1,Java反射机制得到一个类的父类 使用Class类中的get ...
- python中类方法与实例方法的区别-Python中的对象,方法,类,实例,函数用法分析...
本文实例分析了Python中的对象,方法,类,实例,函数用法.分享给大家供大家参考.具体分析如下: Python是一个完全面向对象的语言.不仅实例是对象,类,函数,方法也都是对象. class Foo ...
- (反射):获取一个类的父类和父类的泛型
一.解决问题 获取一个类的父类和父类的泛型 二.实现 Student.java package Test3;public class Student {private String name;priv ...
- 双继承_在Python中使用双下划线防止类属性被覆盖!
在使用Python编写面向对象的代码时,我们会常常使用"继承"这种开发方式.例如下面这一段代码: class Info:def __init__(self):passdef cal ...
最新文章
- React 组件生命周期
- 基于jquery的serializeArray
- python自带intertool模块找不到_介绍Python中内置的itertools模块
- jzoj1166-树中点对距离【点分治】
- Codeforces Round #533 (Div. 2) C.思维dp D. 多源BFS
- Python 中的黑暗角落(一):理解 yield 关键字
- 玩转 SpringBoot 2 快速整合 | 丝袜哥(Swagger)
- create-react-app脚手架中配置webpack的方法
- 3. Magento 模板制作
- android中获取 bitmap 像素的颜色 之吸管取色功能
- thinkpadt410接口介绍_thinkpad T410的扩展插口!
- 支付公司如何赚钱?支付网关如何设计?
- Unity 跑马灯效果
- 海义QQ群共享下载者的一些图例使用步骤教程
- 消息中心(系统消息)实现
- WinRAR压缩时排除文件或目录
- Java内存模型(JMM的原理和介绍)
- 用matlab实现任意点图片的旋转_Matlab实现图像旋转
- 将算术表达式((a+b)+c*(d+e)+f)*(g+h) 转化为二叉树。并分别写出对该二叉树进行 先序、中序、后续和层次遍历得到的结果
- 成功解决:双击eclispe安装文件后没反应