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


    经典类和新式类

    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

     

  • 相关阅读:
    BZOJ 1710. [Usaco2007 Open]Cheappal 廉价回文
    1709. [Usaco2007 Oct]Super Paintball超级弹珠
    1708. [Usaco2007 Oct]Money奶牛的硬币
    redis.conf配置文件说明
    Redis集群操作手册
    Redis使用手册
    oracle分区技术提高查询效率
    oracle物化视图
    Oracle解决索引碎片功能
    Linux笔记二
  • 原文地址:https://www.cnblogs.com/Sup-to/p/11129534.html
Copyright © 2020-2023  润新知