Python的新类是在2.2版本引入的,之前的类我们可以称之为经典类或者老类。
为什么要在2.2中引进new style class呢?官方给的解释是:
为了统一类(class)和类型(type)。
2.2之前,比如2.1版本,class和type是不一样的,比如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,在类模块代码最前面添加如下代码__metaclass__ = classname(一个自定义的新类)。
2. 类都从内建类object直接或者间接地继承。
如果不需要兼容旧式类和旧版类,那就保留所有新式类。
在 Python3 中,这些问题不存在,因为所有的类都是对象类的(隐含的)子类。
代码示例:
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'>
本文为原创文章,版权归知行编程网所有,欢迎分享本文,转载请保留出处!
你可能也喜欢
- ♥ python3中的Shuttle类是如何生成的?12/08
- ♥ python如何进行分数计算08/26
- ♥ 如何使用python自动化框架selenium?12/16
- ♥ 如何在python中保存文本文件11/23
- ♥ 如何在 Python 中使用 item() 方法遍历字典?01/11
- ♥ Python可以用来做什么?09/17
内容反馈