python 新式类和旧式类
来源:互联网 发布:sql case null 编辑:程序博客网 时间:2024/06/02 23:12
新式类和旧式类
所以,为了确保自己使用的是新式类,有以下方法:
当然,在Python3里面,不存在这些问题了,因为所有的类都是object类的子类(隐式)。
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 ):
- pass
- #新类,可以在这里加 __metaclass__ = type
- class CCN(object): #新类,也可以直接继承至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)
[html] view plaincopy
- #输出 ->
[html] view plaincopy
- ['__doc__', '__init__', '__module__']
- dir(c2)
[html] view plaincopy
- 输出 ->
[html] view plaincopy
- ['__class__', '__delattr__', '__dict__', '__doc__', '__format__', '__getattribute__', '__hash__', '__init__', '__module__', '__new__', '__
1 0
- python 新式类和旧式类
- python 新式类和旧式类
- python 新式类和旧式类
- python 新式类和旧式类
- python 新式类 和 旧式类区别
- Python新式类和旧式类的区别
- Python新式类和旧式类的区别
- python 新式类与旧式类
- Python之旧式类、新式类(关键词:Python/旧式类/经典类/新式类)
- Python新式类与经典类(旧式类)的区别
- Python新式类与经典类(旧式类)的区别
- python2.x的新式旧式类问题
- Python中super的用法(新式类与经典类(旧式类)的区别)
- Python中super的用法(新式类与经典类(旧式类)的区别)
- python中基于descriptor的一些概念 新式类 旧式类
- Python新式类和经典类
- python 经典类和新式类
- 【Python】python 中新式类和经典类
- ORCLE建表、增删改查
- xcopy拷贝所有文件
- hihocoder #1014 trie树
- PHP 将json的stdClass Object转成数组array 方法二
- js沙箱模式-内容摘自《javascript模式》
- python 新式类和旧式类
- html a onclick
- Mysql sql语句优化的10条建议
- ProgressBar使用自定义drawable时,进度显示不全的问题
- 最适合新手的 Markdown语法 使用指南
- Shader(着色器)类及其子类的使用
- CAS原理
- 使用注解搭建spring mvc项目
- do catch