-
python 新式类和旧式类_python中的新式类和旧式类
2020-12-08 10:08:23python中的新式类和旧式类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 新式类 旧式类_python 新式类和旧式类
2020-12-17 16:00:30新式类和旧式类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新式类和旧式类区别
2020-09-19 10:30:32python的新式类是2.2版本引进来的,我们可以将之前的类叫做经典类或者旧式类。这篇文章主要介绍了浅谈python新式类和旧式类区别,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 -
python新式类和旧式类的区别_python 新式类和旧式类解析
2021-03-06 13:21:59python的新式类是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中的新式类和旧式类
2021-02-18 14:21:46新式类和旧式类的区别 很多文章中都提到新式类和旧式类这两个字眼,处于好奇,查了一下。 旧式类:在早期的Python版本中,程序员在定义类的时候必须要指明类继承了object,类不会默认继承object,这些没有继承... -
python新式类和旧式类的区别_浅谈python新式类和旧式类区别
2020-12-11 11:19:34python的新式类是2.2版本引进来的,我们可以将之前的类叫做经典类或者旧式类。为什么要在2.2中引进new style class呢?官方给的解释是:为了统一类(class)和类型(type)。在2.2之前,比如2.1版本中,类和类型是不同的... -
python 新式类和旧式类_python2中新式类和旧式类的对比【译】
2020-12-08 10:08:29Classes 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-... -
Python:新式类和旧式类
2019-09-25 15:48:48从定义形式上看,新式类和旧式类的区别:新式类在创建时继承了内置的object对象,而旧式类没有。 # 旧式类 class a: pass # 旧式类 class a1(): pass # 新式类 class a2(object): pass print dir(a) print..... -
python 新式类 和 旧式类区别
2017-09-04 11:03:52python 新式类 和 旧式类区别 -
python中的新式类和旧式类
2018-05-15 17:31:00python中的新式类和旧式类 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之前,... -
python 新式类和旧式类_python 之简单浅谈新式类和旧式类(或称经典类)
2020-12-08 10:08:27#_*_coding:utf-8_*_#知识点:经典类和新式类的区别#父类classFather(object):def__init__(self):self.Fname='fffffff'print'father.__init__'defFunc(self):print'funcfurnc'defBar(self):print'barbarbar'defTest... -
python 新式类 旧式类_浅谈python新式类和旧式类区别
2020-12-08 13:49:48python的新式类是2.2版本引进来的,我们可以将之前的类叫做经典类或者旧式类。为什么要在2.2中引进new style class呢?官方给的解释是:为了统一类(class)和类型(type)。在2.2之前,比如2.1版本中,类和类型是不同的... -
python object类_Python新式类和旧式类的区别?
2021-01-24 10:39:47公众号新增加了一个栏目,就是每天给大家解答一道Python常见的面试题,反正每天不贪多,一天一题,正好合适,只希望这个面试栏目,给...废话不多说,开始今天的题目:问:说说Python新式类和旧式类的区别?答:Pyth... -
python 新式类 旧式类_Python新式类和旧式类的区别
2021-01-28 22:06:58webservice发布服务:CXF及客户端调用2.CXF:(与spring整合) CXF相对来说操作没有AXIS繁琐 1.导入spring的jar包和cxf的jar包 2.在spring的核心配置文件中配置发布的接口类 ... -
Python新式类和旧式类的区别
2015-08-12 17:00:00新式类是为了统一**而在2.2中开始引入的。 代码讲解 上面的例子比较明白的说明了问题。 B是定义的新式类。那么输入b的时候,不论是type(b),还是b.__...另外,新式类和旧式类还有一个区别就是在多继承的时候,... -
python3 新式类_python新式类和旧式类区别
2021-01-14 20:21:00python的新式类是2.2版本引进来的,我们可以将之前的类叫做经典类或者旧式类。为什么要在2.2中引进new style class呢?官方给的解释是:为了统一类(class)和类型(type)。在2.2之前,比如2.1版本中,类和类型是不同的... -
python--新式类和旧式类
2019-04-06 21:06:24新式类和旧式(经典)类:object是Python为所有对象提供的基类,提供有一些内置的属性和方法,可以使用dir函数查看新式类:以object为基类的类,推荐使用经典类:不以object为基类的类,不推荐使用 在python3.X中定义... -
Python : 新式类和旧式类
2019-06-12 20:12:27新式类很早在2.2就出现了,所以旧式类完全是兼容的问题,Python3里的类全部都是新式类.这里有一个MRO问题可以了解下(新式类继承是根据C3算法,旧式类是深度优先),<Python核心编程>里讲的也很多. 一个旧式类的深度... -
python新式类c3算法_浅谈python新式类和旧式类区别
2020-12-11 11:19:31python的新式类是2.2版本引进来的,我们可以将之前的类叫做经典类或者旧式类。为什么要在2.2中引进new style class呢?官方给的解释是:为了统一类(class)和类型(type)。在2.2之前,比如2.1版本中,类和类型是不同的... -
python新式类和旧式类(经典类)
2019-02-08 14:41:38新式类: python3默认,移除了旧式类,不需要显示继承object,MRO采用广度优先搜索。 旧式类(经典类): python2默认,显示继承object就是新式类,否则就是经典类,MRO采用深度优先搜索。 至于优先级搜索可以参考...