精华内容
下载资源
问答
  • python中的新式类和旧式类2018-05-15python2中既有新式类又有旧式类默认是经典类,只有显式继承object才是新式类python3中只有新式类默认是新式类,不必显式继承ojbect新式类的MRO(method resolution order 基类搜索...

    python中的新式类和旧式类

    2018-05-15

    python2中既有新式类又有旧式类

    默认是经典类,只有显式继承object才是新式类

    python3中只有新式类

    默认是新式类,不必显式继承ojbect

    新式类的MRO(method resolution order 基类搜索顺序)算法采用C3算法广度优先搜索,而旧式类的MRO算法是采用深度优先搜索

    新式类相同父类只执行一次构造函数,经典类重复执行多次。

    新式类都从object继承,经典类不需要

    以下是一个例子:

    class A:

    pass

    class B:

    pass

    class C(B):

    pass

    class D(C,A):

    pass

    执行顺序为:D->C->B,->A

    class A(object):

    pass

    class B(object):

    pass

    class C(object):

    pass

    class D(A,B,C):

    pass

    执行顺序为: D->A->B->C->Object

    展开全文
  • 新式类和旧式类

    2018-07-09 16:50:51
    首先来了解一下新式类与经典类的区别,从创建方法上可以明显的看出:#新式类class C(object): ...使用dir()方法也可以看出新式类中定义很多新的属性方法,而经典类好像就2个: 这些新的属性方法都是从object...
    首先来了解一下新式类与经典类的区别,从创建方法上可以明显的看出:
    #新式类
    class C(object):
        pass
    #经典类
    class B:
        pass
    简单的说,新式类是在创建的时候继承内置object对象(或者是从内置类型,如list,dict等),而经典类是直
    接声明的。使用dir()方法也可以看出新式类中定义很多新的属性和方法,而经典类好像就2个:
     

    这些新的属性和方法都是从object对象中继承过来的。



    一个旧式类的深度优先的例子

    class A():
        def foo1(self):
            print "A"
    class B(A):
        def foo2(self):
            pass
    class C(A):
        def foo1(self):
            print "C"
    class D(B, C):
        pass
    
    d = D()
    d.foo1()
    
    # A

    按照经典类的查找顺序从左到右深度优先的规则,在访问d.foo1()的时候,D这个类是没有的..那么往上查找,先找到B,里面没有,深度优先,访问A,找到了foo1(),所以这时候调用的是A的foo1(),从而导致C重写的foo1()被绕过


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

    新式类和旧式类

    python的新式类是2.2版本引进来的,我们可以将之前的类叫做经典类或者旧类。

    为什么要在2.2中引进new style class呢?官方给的解释是:

    为了统一类(class)和类型(type)。

    在2.2之前,比如2.1版本中,类和类型是不同的,如a是ClassA的一个实例,那么a.__class__返回 ‘ class    __main__.ClassA‘ ,type(a)返回总是。而引入新类后,比如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

    class CCN(object):    #新类

    def __init__( self ):

    pass

    c1 = CC()

    c2 = CCN()

    c1.__class__            # 输出-> 

    type(c1)                # 输出-> 

    c2.__class__            # 输出->

    type(c2)                # 输出->

    dir(c1)

    展开全文
  • python的新式类是2.2版本引进来的,我们可以将之前的类叫做经典类或者旧式类。这篇文章主要介绍了浅谈python新式类和旧式类区别,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • python的新式类是2.2版本引进来的,我们可以将之前的类叫做经典类或者旧式类。为什么要在2.2中引进new style class呢?官方给的解释是:为了统一类(class)和类型(type)。在2.2之前,比如2.1版本中,类和类型是不同的...

    导读热词对python这个高级语言感兴趣的小伙伴,下面一起跟随编程之家 jb51.cc的小编两巴掌来看看吧!

    python的新式类是2.2版本引进来的,我们可以将之前的类叫做经典类或者旧式类。

    为什么要在2.2中引进new style class呢?官方给的解释是:

    为了统一类(class)和类型(type)。

    在2.2之前,比如2.1版本中,类和类型是不同的,如a是ClassA的一个实例,那么a.__class__返回 ‘ class __main__.ClassA‘ ,type(a)返回总是。而引入新类后,比如ClassB是个新类,b是ClassB的实例,b.__class__和type(b)都是返回‘class '__main__.ClassB' ,这样就统一了。

    引入新类后,还有其他的好处,比如更多的内置属性将会引入,描述符的引入,属性可以来计算等等。

    为了向前兼容,默认情况下用户定义的类为经典类,新类需要继承自所有类的基类 object 或者继承自object的新类。

    值得注意的地方是,虽然使用的是最新的python(2.7),但是一些特性不会在旧式类起作用。

    所以,为了确保自己使用的是新式类,有两种以下方法:

    1. 元类,在类模块代码的最前面加入如下代码 __Metaclass__ = classname(自定义的某个新式类)。

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

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

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

    代码示例:

    # @param python新式类和旧式类区别

    # @author 编程之家 jb51.cc|jb51.cc

    class oldClass: #经典类

    def __init__( self ):

    pass

    class newClass(object): #新类

    def __init__( self ):

    pass

    c1 = oldClass()

    c2 = newClass()

    c1.__class__ # 输出->

    type(c1) # 输出->

    c2.__class__ # 输出->

    type(c2) # 输出->

    # End www.jb51.cc

    相关文章

    总结

    以上是编程之家为你收集整理的python 新式类和旧式类解析全部内容,希望文章能够帮你解决python 新式类和旧式类解析所遇到的程序开发问题。

    如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

    本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。

    如您喜欢交流学习经验,点击链接加入交流1群:1065694478(已满)交流2群:163560250

    展开全文
  • 新式类和旧式类的区别 很多文章中都提到新式类和旧式类这两个字眼,处于好奇,查了一下。 旧式类:在早期的Python版本中,程序员在定义类的时候必须要指明类继承了object,类不会默认继承object,这些没有继承...
  • python的新式类是2.2版本引进来的,我们可以将之前的类叫做经典类或者旧式类。为什么要在2.2中引进new style class呢?官方给的解释是:为了统一类(class)和类型(type)。在2.2之前,比如2.1版本中,类和类型是不同的...
  • Classes and instances come in two flavors: old-style (or ...➤类和实例分为两大类:旧式类和新式类。Up to Python 2.1, old-style classes were the only flavour available to the user. The concept of (old-...
  • 从定义形式上看,新式类和旧式类的区别:新式类在创建时继承了内置的object对象,而旧式类没有。 # 旧式类 class a: pass # 旧式类 class a1(): pass # 新式类 class a2(object): pass print dir(a) print.....
  • python 新式类 旧式类区别
  • python中的新式类和旧式类 2018-05-15 python2中既有新式类又有旧式类 默认是经典类,只有显式继承object才是新式类 python3中只有新式类默认是新式类,不必显式继承ojbect 新式类的MRO(method resolution ...
  • python 新式类和旧式类

    2016-06-13 09:40:24
    新式类和旧式类 python的新式类是2.2版本引进来的,我们可以将之前的类叫做经典类或者旧类。 为什么要在2.2中引进new style class呢?官方给的解释是: 为了统一类(class)和类型(type)。 在2.2之前,...
  • #_*_coding:utf-8_*_#知识点:经典类和新式类的区别#父类classFather(object):def__init__(self):self.Fname='fffffff'print'father.__init__'defFunc(self):print'funcfurnc'defBar(self):print'barbarbar'defTest...
  • python的新式类是2.2版本引进来的,我们可以将之前的类叫做经典类或者旧式类。为什么要在2.2中引进new style class呢?官方给的解释是:为了统一类(class)和类型(type)。在2.2之前,比如2.1版本中,类和类型是不同的...
  • 公众号新增加了一个栏目,就是每天给大家解答一道Python常见的面试题,反正每天不贪多,一天一题,正好合适,只希望这个面试栏目,给...废话不多说,开始今天的题目:问:说说Python新式类和旧式类的区别?答:Pyth...
  • webservice发布服务:CXF及客户端调用2.CXF:(与spring整合) CXF相对来说操作没有AXIS繁琐 1.导入spring的jar包cxf的jar包 2.在spring的核心配置文件中配置发布的接口 ...
  • 新式类是为了统一**而在2.2中开始引入的。 代码讲解 上面的例子比较明白的说明了问题。 B是定义的新式类。那么输入b的时候,不论是type(b),还是b.__...另外,新式类和旧式类还有一个区别就是在多继承的时候,...
  • python的新式类是2.2版本引进来的,我们可以将之前的类叫做经典类或者旧式类。为什么要在2.2中引进new style class呢?官方给的解释是:为了统一类(class)和类型(type)。在2.2之前,比如2.1版本中,类和类型是不同的...
  • 新式类和旧式(经典)类:object是Python为所有对象提供的基类,提供有一些内置的属性和方法,可以使用dir函数查看新式类:以object为基类的类,推荐使用经典类:不以object为基类的类,不推荐使用 在python3.X中定义...
  • 新式类很早在2.2就出现了,所以旧式类完全是兼容的问题,Python3里的类全部都是新式类.这里有一个MRO问题可以了解下(新式类继承是根据C3算法,旧式类是深度优先),<Python核心编程>里讲的也很多. 一个旧式类的深度...
  • python的新式类是2.2版本引进来的,我们可以将之前的类叫做经典类或者旧式类。为什么要在2.2中引进new style class呢?官方给的解释是:为了统一类(class)和类型(type)。在2.2之前,比如2.1版本中,类和类型是不同的...
  • 新式类: python3默认,移除了旧式类,不需要显示继承object,MRO采用广度优先搜索。 旧式类(经典类): python2默认,显示继承object就是新式类,否则就是经典类,MRO采用深度优先搜索。 至于优先级搜索可以参考...

空空如也

空空如也

1 2 3 4 5 ... 11
收藏数 214
精华内容 85
热门标签
关键字:

新式类和旧式类