知行编程网知行编程网  2023-01-03 22:30 知行编程网 隐藏边栏  4 
文章评分 0 次,平均分 0.0
导语: 本文主要介绍了关于一文读懂python新式类和旧式类区别的相关知识,希望可以帮到处于编程学习途中的小伙伴

一篇文章看懂python新式类和旧式类的区别

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'>

本文为原创文章,版权归所有,欢迎分享本文,转载请保留出处!

知行编程网
知行编程网 关注:1    粉丝:1
这个人很懒,什么都没写
扫一扫二维码分享