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__ = classname(自定义的某个新式类)。

2. 类都从内建类object直接或者间接地继承。

如果不需要兼容旧式类,旧版本的类,那么就保持都是新式类。

在Python3里面,不存在这些问题了,因为所有的类都是object类的子类(隐式)。

代码示例:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

class oldClass:            #经典类

    def __init__( self ):

        pass

 

class newClass(object):    #新类

    def __init__( self ):

        pass

 

c1 = oldClass()

c2 = newClass()

 

c1.__class__            # 输出-> <class __main__.oldClass at 0x0137BF10>

type(c1)                # 输出-> <type 'instance'>

 

c2.__class__            # 输出-><class '__main__.newClass'>

type(c2)                # 输出-><class '__main__.newClass'>

python新式类和旧式类区别相关推荐

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

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

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

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

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

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

  4. Python:新式类和旧式类

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

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

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

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

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

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

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

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

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

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

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

最新文章

  1. python 直接if判断和is not None的区别
  2. java高效代码_Java工程师该如何编写高效代码?
  3. java-------------华为-----------字符串链接最长路径查询
  4. Redis详解——常用命令总结(完善中)
  5. 手摇泵PHP一32_节能手摇泵的制作方法
  6. vue项目将token存在(vuex)store和localstorage中
  7. P2153-晨跑【费用流,网络流,拆点】
  8. Idea导入maven工程,并运行
  9. MFC编程——Where is WinMain?
  10. 使用SniperPhish进行电子邮件钓鱼
  11. tcl中数字加减的怪异现象
  12. 算法:什么是棒球游戏问题?
  13. Python深度学习05——Keras循环神经网络实现股价预测
  14. python牛顿法算立方根_牛顿迭代法求解立方根
  15. 2020/11/05随记 基于jini的C++和Java交互
  16. java三元表达式必须返回_java – 三元运算符的右手表达式必须兼容...
  17. iOS大型项目开发架构
  18. Fast DDS和Cyclone DDS对比性能测试
  19. android studio添加繁体,Android (Android studio3.0.1)一篇可以实现app多语言的转换(简单操作)的教程-Go语言中文社区...
  20. 让div与浏览器高度相同

热门文章

  1. 屏幕长度与像素长度的转换
  2. 超详细的Redisson实现分布式锁原理解析
  3. WIN32 进程间通讯-共享内存
  4. java通过反射调用方法_Java_通过反射调用类中的方法
  5. python-数据分析-pandas基础知识
  6. 【折腾日记GEN8_2】ESXI的安装
  7. 2022出海拉美:秘鲁电商市场现状及发展前景
  8. 关于站群的教程,迷途知返不晚
  9. python selenium 教程(-) 安装
  10. 论文研读 —— 7. Very Deep Convolutional Networks for Large-Scale Image Recognition (1/3)