python中新式类和经典类
python中的类分为新式类和经典类,具体有什么区别呢?简单的说,
1.新式类都从object继承,经典类不需要。
Python 2.x中默认都是经典类,只有显式继承了object才是新式类
Python 3.x中默认都是新式类,不必显式的继承object
2.经典类继承深度优先,新式类继承广度优先。
在多重继承关系下,子类的实例对象想要调用父类的方法,向上寻找时的顺序。
3.新式类相同父类只执行一次构造函数,经典类重复执行多次。
class A:def __init__(self):print 'a',
class B(A):def __init__(self):A().__init__()print 'b',
class C(A):def __init__(self):A().__init__()print 'c',
class D(B,C):def __init__(self):B().__init__()C().__init__()print 'd',class E(D,A):def __init__(self):D().__init__()A().__init__()print 'e',
d=D()
print ''
e=E()
代码执行后打印如下:
a a b a a b a a c a a c d
a a b a a b a a c a a c d a a b a a b a a c a a c d a a e
第一行应该按如下分组a a b 、a a b |a a c 、a a c| d。首先执行D的init函数,D的init包含B和C的init,都执行之后才会执行print d,至于为什么显示执行了两次构造函数,这个取决于类内部的call方法,之后介绍。
'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:778463939
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
class A(object):def __init__(self):print 'a',
class B(A):def __init__(self):super(B,self).__init__()print 'b',
class C(A):def __init__(self):super(C,self).__init__()print 'c',
class D(B,C):def __init__(self):super(D,self).__init__()print 'd',
class E(D,A):def __init__(self):super(E,self).__init__()print 'e',
d=D()
print ''
e=E()
结果打印如下:
a c b d
a c b d e
python中新式类和经典类相关推荐
- python中的__new__与__init__,新式类和经典类(2.x)
在python2.x中,从object继承得来的类称为新式类(如class A(object))不从object继承得来的类称为经典类(如class A()) 新式类跟经典类的差别主要是以下几点: 1 ...
- python新式类和经典类区别_Python中新式类和经典类的区别,钻石继承
1)首先,写法不一样: class A: pass class B(object): 2)在多继承中,新式类采用广度优先搜索,而旧式类是采用深度优先搜索. 3)新式类更符合OOP编程思想,统一了pyt ...
- python中新式类和经典类的区别
1.新式类和经典类 在Python 2及以前的版本中,由任意内置类型派生出的类(只要一个内置类型位于类树的某个位置),都属于"新式类",都会获得所有"新式类"的 ...
- python单例模式控制成只初始化一次,常规型的python单例模式在新式类和经典类中的区别。...
单例模式的写法非常多,但常规型的单例模式就是这样写的,各种代码可能略有差异,但核心就是要搞清楚类属性 实例属性,就很容易写出来,原理完全一模一样. 如下: 源码: class A(object):de ...
- python经典类新式类_Python新式类与经典类(旧式类)的区别
看写poc的时候看到的,思考了半天,现在解决了 转载自http://blog.csdn.net/zimou5581/article/details/53053775 Python中类分两种:旧式类和新 ...
- Python新式类与经典类(旧式类)的区别
看写poc的时候看到的,思考了半天,现在解决了 转载自http://blog.csdn.net/zimou5581/article/details/53053775 Python中类分两种:旧式类和新 ...
- python3新式类_Python中新式类与经典类的区别详析
1.新式类与经典类 在Python 2及以前的版本中,由任意内置类型派生出的类(只要一个内置类型位于类树的某个位置),都属于"新式类",都会获得所有"新式类"的 ...
- python经典类新式类_Python的新式类和经典类
1. 前言 python在2.2版本中引入了descriptor功能,也正是基于这个功能实现了新式类(new-styel class)的对象模型, 同时解决了之前版本中经典类(classic clas ...
- python 新式类 旧式类_Python新式类与经典类(旧式类)的区别
Python中类分两种:旧式类和新式类: ➤新式类都从object继承,经典类不需要. ➤新式类的MRO(method resolution order 基类搜索顺序)算法采用C3算法广度优先搜索,而 ...
最新文章
- SAP freelancer接SAP项目应有底线思维
- Excel制作带勾的方框
- 论文浅尝 \ 联合知识图谱实例和本体概念的通用表示学习
- KNN算法——分类部分
- Java终结符_从零开始写个编译器吧 - TerminalSymbol.java 与 NonTerminalSymbol.java
- [LeetCode]Link List Cycle
- 兼容ie10以下版本的placeholder属性
- hive中的高阶函数:with cube函数,Grouping sets函数,With rollup函数
- 谷歌浏览器设置护眼模式,全黑主题
- MyBatis—引入外部配置文件(properties)
- 阿里云国际站代充值个人注册与分销商邀约区别
- 职场学习、员工管理-怎样做企业最受欢迎的员工
- html 微信登陆,登录包含微信登录.html
- 血清CEA、HE4、CA199、CA153、CA125水平联合检测在妇科恶性肿瘤诊断中的临床意义
- 投资者选择量化基金的四个指标
- php登录后不点击注销,icloud无密码强制注销的方法
- win10系统打不开计算机管理,win10计算机管理打不开如何办
- MySQL数据盘空间满了
- 本科计算机考研地信,作为一个已经毕业一年的地信专业学生的肺腑之言
- Semantic Versioning
热门文章
- 你不能错过这些美食!
- DelphiXE7中创建WebService(服务端+客户端)
- PHPExcel常用方法汇总
- Silverlight 5 RC新特性探索系列:13.Silverlight 5 RC 新增对并行任务库(TPL)的支持
- boost log 能不能循环覆盖_如何在 JS 循环中正确使用 async 与 await
- 通过PDF无纸化测试SAP SmartForm打印效果
- SAP 外币金额 汇率 转换
- 成本费用跨年取得发票的财务、税务处理
- SAP销售发票同步产生会计凭证的两种做法
- POPUP_TO_CONFIRM