python 经典类和新式类

2018-09-27  本文已影响14人  HHHHUA

经典类

class A():
    ret = 1
    def __init__(self):
        pass
class B(A):
    def __init__(self):
        pass   
class C(A):
    ret = 2
    def __init__(self):
        pass           
class D(B, C):
    def __init__(self):
        pass #B->A->C         x = D()print x.ret输出为:1

新式类

class A(object):
    ret = 1
    def __init__(self):
        pass          
class B(A):
    def __init__(self):
        pass  
class C(A):
    ret = 2    
def __init__(self):
        pass          
class D(B, C):
    def __init__(self):
        pass    #B->C->A       x = D()print x.ret输出为:2

super()

class A(object):
    def __init__(self):
        print "A"         
class B(object):
    def __init__(self):
        print "B"          
class C(object):
    def __init__(self):
        print "C"  
class D(A,B,C):
    def __init__(self):
        super(D,self).__init__()
        super(A,self).__init__()
        super(B,self).__init__()
        super(C,self).__init__()
         X  = D()

会发现:
super(D,self).init()
执行的是A.init()

super(A,self).init()
执行的是B.init()

super(B,self).init()
执行的是C.init()

super(C,self).init()执行的是Object.init()
这是因为mro(D)为:[ D, A, B, C, Object]

Python 2.x中默认都是经典类,只有显式继承了object才是新式类, 使用了深度优先的方法
Python 3.x中默认都是新式类,不必显式的继承object, 使用的是广度优先的方法

上一篇 下一篇

猜你喜欢

热点阅读