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),但是一些特性不会在旧式类起作用。
所以,为了确保自己使用的是新式类,有以下方法:

  1. 把这个赋值语句放在类模块代码的最前面 __metaclass__ = type(前面有提过)。

  2. 自己的类都从内建类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 新式类和旧式类相关推荐

  1. python 新式类和旧式类_python新式类和旧式类区别

    python的新式类是2.2版本引进来的,我们可以将之前的类叫做经典类或者旧式类. 为什么要在2.2中引进new style class呢?官方给的解释是: 为了统一类(class)和类型(type) ...

  2. python新式类和旧式类区别

    python的新式类是2.2版本引进来的,我们可以将之前的类叫做经典类或者旧式类. 为什么要在2.2中引进new style class呢?官方给的解释是: 为了统一类(class)和类型(type) ...

  3. python新式类和旧式类的区别_浅谈python新式类和旧式类区别

    python的新式类是2.2版本引进来的,我们可以将之前的类叫做经典类或者旧式类. 为什么要在2.2中引进new style class呢?官方给的解释是: 为了统一类(class)和类型(type) ...

  4. Python:新式类和旧式类

    1.介绍   Python2.1之前,只存在旧式类,从Python2.2开始,Python引入了新式类. 从定义形式上看,新式类和旧式类的区别:新式类在创建时继承了内置的object对象,而旧式类没有 ...

  5. python 新式类与旧式类的区别

    前言 新式类是python2.2引入的,python2存在新式类与旧式类的区别,而python3全部应用的是新式类. 声明方式 对于python3,以下声明方式作用是相同的: class Aclass ...

  6. python3新式类_python新式类和旧式类区别

    python的新式类是2.2版本引进来的,我们可以将之前的类叫做经典类或者旧式类. 为什么要在2.2中引进new style class呢?官方给的解释是: 为了统一类(class)和类型(type) ...

  7. python3 新式类_python新式类和旧式类区别

    python的新式类是2.2版本引进来的,我们可以将之前的类叫做经典类或者旧式类. 为什么要在2.2中引进new style class呢?官方给的解释是: 为了统一类(class)和类型(type) ...

  8. python中的新式类与旧式类的一些基于descriptor的概念(下)

    3. Descriptor介绍 3.1 Descriptor代码示例 3.2 定义 3.3 Descriptor Protocol(协议) 3.4 Descriptor调用方法 4. 基于Descri ...

  9. python中的新式类与旧式类的一些基于descriptor的概念(上)

    python中基于descriptor的一些概念(上) 1. 前言 2. 新式类与经典类 2.1 内置的object对象 2.2 类的方法 2.2.1 静态方法 2.2.2 类方法 2.3 新式类(n ...

  10. python经典类新式类_Python新式类与经典类(旧式类)的区别

    看写poc的时候看到的,思考了半天,现在解决了 转载自http://blog.csdn.net/zimou5581/article/details/53053775 Python中类分两种:旧式类和新 ...

最新文章

  1. opencv 自带库Canny边缘检测
  2. GTX 1080Ti + cuda8.0 + cuDNN6.0 安装及测试
  3. SaltStack状态导入(include)
  4. 【Java】14 JDBC编程学习总结
  5. MySql远程连接设置
  6. 【题解】【数组】【Prefix Sums】【Codility】Genomic Range Query
  7. golang 排序_堆 堆排序 优先队列 图文详解(Golang实现)
  8. Java中锁的使用和实现
  9. Node.js:入门资料
  10. HBase之HFile索引机制
  11. 剑指Offer面试题:28.连续子数组的最大和
  12. 数据结构基础_二分法查找
  13. HTML5 WebRTC API无需网络获取本地IP
  14. java 身份证地址提取籍贯_输入身份证号获取籍贯、出生日期、性别
  15. 旧版Wordpress的备案整改技巧
  16. 云服务器安全组开放所有端口
  17. 得意狗寄给我特快专递
  18. (CVE-2014-0160) OpenSSL 心脏滴血漏洞
  19. 游戏策划入门(2)——如何写一份项目建议书?
  20. ftp服务器连接数修改,ftp服务器连接数设置

热门文章

  1. ENVI入门系列教程---二、图像分析---10.基于专家知识决策树分类
  2. 第四章——变换域处理方法
  3. Filter Concatenationd的理解
  4. 地图Web服务API接口——搜索POI(以高德地图为例)
  5. CSS学习总结(5)——列表/表格/链接/鼠标光标样式
  6. 光学定位与追踪技术_从显微镜到显纳镜:小于2nm定位精度光学显微镜
  7. java中包定义_java中包的定义与使用
  8. java z+_Java算法练习—— Z 字形变换
  9. Flutter监听网络变化
  10. Flink 最佳搭档:开发部署平台 Zeppelin 的自白