二十五.面向对象(经典类和新式类)

经典类和新式类

class A(object):
    pass

class B(A):
    pass

class C(B):
    pass

class D(object):
    pass

class E(D,C):
    pass

class F(object):
    pass

class G(F):
    pass

class H(C,G):
    pass

class Foo(E,H):
    pass

# a1=Foo()
print(Foo.__mro__)
# (<class '__main__.Foo'>, <class '__main__.E'>, <class '__main__.D'>, <class '__main__.H'>, <class '__main__.C'>, <class '__main__.B'>, <class '__main__.A'>, <class '__main__.G'>, <class '__main__.F'>, <class 'object'>)
L(E)=E,D,C,B,A,object
L(H)=H,C,B,A,G,F,object
Foo=(object)+(G,F,object)
Foo ,E,D,H,C,B,A,G,F,object

经典类和新式类
   py2:
      经典类
      新式类   如果自己或自己的前辈只要有人继承object 那么此类就是新式类

   py3:
      新式类

      经典类 和新式类的查找成员的顺序不一样

      经典类 :一条道路走到黑 (深度优先)

      新式类 : c3算法实现  广度优先

      Foo+ (C,D,F,G)+(G,D,G,W)+(I,G,D,W)

      Foo I  B

      获取 第一个表头  和 其他表尾进行比较
             不存在   则拿走
             如果存在 则放弃 然后获取第二个表的表头 再次和其他表的表尾进行比较

      注意事项

          super 是遵循__mro__执行顺序

 新式类py3

 

猜你喜欢

转载自www.cnblogs.com/Sup-to/p/11129534.html
今日推荐