python 新式类和旧式类
2019独角兽企业重金招聘Python工程师标准>>>
新式类和旧式类
python的新式类是2.2版本引进来的,我们可以将之前的类叫做经典类或者旧类。
为什么要在2.2中引进new style class呢?官方给的解释是:
为了统一类(class)和类型(type)。
在2.2之前,比如2.1版本中,类和类型是不同的,如a是ClassA的一个实例,那么a.__class__返回 ‘ class __main__.ClassA‘ ,type(a)返回总是<type 'instance'>。而引入新类后,比如ClassB是个新类,b是ClassB的实例,b.__class__和type(b)都是返回‘class '__main__.ClassB' ,这样就统一了。
引入新类后,还有其他的好处,比如更多的内置属性将会引入,描述符的引入,属性可以来计算等等。
为了向前兼容,默认情况下用户定义的类为经典类,新类需要继承自所有类的基类 object 或者继承自object的新类。
值得注意的地方是,虽然使用的是最新的python(2.7),但是一些特性不会在旧式类起作用。
所以,为了确保自己使用的是新式类,有以下方法:
把这个赋值语句放在类模块代码的最前面 __metaclass__ = type(前面有提过)。
自己的类都从内建类object直接或者间接地继承。
如果不需要兼容旧式类,旧版本的类,那么就保持都是新式类。
当然,在Python3里面,不存在这些问题了,因为所有的类都是object类的子类(隐式)。
代码示例:
class CC: #经典类def __init__( self ):passclass CCN(object): #新类def __init__( self ):pass c1 = CC()
c2 = CCN()c1.__class__ # 输出-> <class __main__.CC at 0x0137BF10>
type(c1) # 输出-> <type 'instance'>c2.__class__ # 输出-><class '__main__.CCN'>
type(c2) # 输出-><class '__main__.CCN'>dir(c1)
转载于:https://my.oschina.net/u/242764/blog/414833
python 新式类和旧式类相关推荐
- python 新式类和旧式类_python新式类和旧式类区别
python的新式类是2.2版本引进来的,我们可以将之前的类叫做经典类或者旧式类. 为什么要在2.2中引进new style class呢?官方给的解释是: 为了统一类(class)和类型(type) ...
- python新式类和旧式类区别
python的新式类是2.2版本引进来的,我们可以将之前的类叫做经典类或者旧式类. 为什么要在2.2中引进new style class呢?官方给的解释是: 为了统一类(class)和类型(type) ...
- python新式类和旧式类的区别_浅谈python新式类和旧式类区别
python的新式类是2.2版本引进来的,我们可以将之前的类叫做经典类或者旧式类. 为什么要在2.2中引进new style class呢?官方给的解释是: 为了统一类(class)和类型(type) ...
- Python:新式类和旧式类
1.介绍 Python2.1之前,只存在旧式类,从Python2.2开始,Python引入了新式类. 从定义形式上看,新式类和旧式类的区别:新式类在创建时继承了内置的object对象,而旧式类没有 ...
- python 新式类与旧式类的区别
前言 新式类是python2.2引入的,python2存在新式类与旧式类的区别,而python3全部应用的是新式类. 声明方式 对于python3,以下声明方式作用是相同的: class Aclass ...
- python3新式类_python新式类和旧式类区别
python的新式类是2.2版本引进来的,我们可以将之前的类叫做经典类或者旧式类. 为什么要在2.2中引进new style class呢?官方给的解释是: 为了统一类(class)和类型(type) ...
- python3 新式类_python新式类和旧式类区别
python的新式类是2.2版本引进来的,我们可以将之前的类叫做经典类或者旧式类. 为什么要在2.2中引进new style class呢?官方给的解释是: 为了统一类(class)和类型(type) ...
- python中的新式类与旧式类的一些基于descriptor的概念(下)
3. Descriptor介绍 3.1 Descriptor代码示例 3.2 定义 3.3 Descriptor Protocol(协议) 3.4 Descriptor调用方法 4. 基于Descri ...
- python中的新式类与旧式类的一些基于descriptor的概念(上)
python中基于descriptor的一些概念(上) 1. 前言 2. 新式类与经典类 2.1 内置的object对象 2.2 类的方法 2.2.1 静态方法 2.2.2 类方法 2.3 新式类(n ...
- python经典类新式类_Python新式类与经典类(旧式类)的区别
看写poc的时候看到的,思考了半天,现在解决了 转载自http://blog.csdn.net/zimou5581/article/details/53053775 Python中类分两种:旧式类和新 ...
最新文章
- opencv 自带库Canny边缘检测
- GTX 1080Ti + cuda8.0 + cuDNN6.0 安装及测试
- SaltStack状态导入(include)
- 【Java】14 JDBC编程学习总结
- MySql远程连接设置
- 【题解】【数组】【Prefix Sums】【Codility】Genomic Range Query
- golang 排序_堆 堆排序 优先队列 图文详解(Golang实现)
- Java中锁的使用和实现
- Node.js:入门资料
- HBase之HFile索引机制
- 剑指Offer面试题:28.连续子数组的最大和
- 数据结构基础_二分法查找
- HTML5 WebRTC API无需网络获取本地IP
- java 身份证地址提取籍贯_输入身份证号获取籍贯、出生日期、性别
- 旧版Wordpress的备案整改技巧
- 云服务器安全组开放所有端口
- 得意狗寄给我特快专递
- (CVE-2014-0160) OpenSSL 心脏滴血漏洞
- 游戏策划入门(2)——如何写一份项目建议书?
- ftp服务器连接数修改,ftp服务器连接数设置
热门文章
- ENVI入门系列教程---二、图像分析---10.基于专家知识决策树分类
- 第四章——变换域处理方法
- Filter Concatenationd的理解
- 地图Web服务API接口——搜索POI(以高德地图为例)
- CSS学习总结(5)——列表/表格/链接/鼠标光标样式
- 光学定位与追踪技术_从显微镜到显纳镜:小于2nm定位精度光学显微镜
- java中包定义_java中包的定义与使用
- java z+_Java算法练习—— Z 字形变换
- Flutter监听网络变化
- Flink 最佳搭档:开发部署平台 Zeppelin 的自白