python经典类新式类

阅读: 评论:0

python经典类新式类

python经典类新式类

python中的类分为新式类和经典类,具体有什么区别呢?简单的说,

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

Python 2.x中默认都是经典类,只有显式继承了object才是新式类

Python 3.x中默认都是新式类,不必显式的继承object

2.经典类继承深度优先,新式类继承广度优先。

在多重继承关系下,子类的实例对象想要调用父类的方法,向上寻找时的顺序。

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

class A:

def __init__(self):

print 'a',

class B(A):

def __init__(self):

A().__init__()

print 'b',

class C(A):

def __init__(self):

A().__init__()

print 'c',

class D(B,C):

def __init__(self):

B().__init__()

C().__init__()

print 'd',

class E(D,A):

def __init__(self):

D().__init__()

A().__init__()

print 'e',

d=D()

print ''

e=E()

代码执行后打印如下:

a a b a a b a a c a a c d

a a b a a b a a c a a c d a a b a a b a a c a a c d a a e

第一行应该按如下分组a a b 、a a b |a a c 、a a c| d。首先执行D的init函数,D的init包含B和C的init,都执行之后才会执行print d,至于为什么显示执行了两次构造函数,这个取决于类内部的call方法,之后介绍。

class A(object):

def __init__(self):

print 'a',

class B(A):

def __init__(self):

super(B,self).__init__()

print 'b',

class C(A):

def __init__(self):

super(C,self).__init__()

print 'c',

class D(B,C):

def __init__(self):

super(D,self).__init__()

print 'd',

class E(D,A):

def __init__(self):

super(E,self).__init__()

print 'e',

d=D()

print ''

e=E()

结果打印如下:

a c b d

a c b d e

本文发布于:2024-01-30 05:38:38,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170656432019610.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:经典   python
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23