zoukankan      html  css  js  c++  java
  • 多继承原理c3算法。两个继承的python为广度优先

    class H:
        def bar(self):
            print("h bar")
    
    class G(H):
        def bar(self):
            print("g bar")
    
    class F(H):
        def bar(self):
            print("f bar")
    
    class E(G):
        def bar(self):
            print("e bar")
    
    
    class D(F):
        def bar(self):
            print("d bar")
    
    class C(E):
        def bar(self):
            print("c bar")
    
    class B(D):
        def bar(self):
            print("b bar")
    
    class A(B,C,D):
        def bar(self):
            print("a bar")
    
    print(A.mro())  # [<class '__main__.A'>, <class '__main__.B'>, <class '__main__.C'>, <class '__main__.D'>, <class '__main__.F'>,
    #  <class '__main__.E'>, <class '__main__.G'>, <class '__main__.H'>, <class 'object'>]
    # [B,C,D]
    #[B.D.F,H], [C,E,G,H],[D,F,H]
    # c3算法
    # 先找B头,放到一个列表里面,
    #[B,C,D.F,E,G,H]    # [H], [E,G,H],[H] []
    # c3算法就是先把继承关系最下面A的父类找出来。再以每个父类为头[B,C,D],找到其所有的父类[B.D.F,H], [C,E,G,H],[D,F,H]。然后以[B,C,D]中B开头,发现有两个B头
    #第一个为B,去掉每个列表里面的B,同理得到C,D。这样继承顺序为B,C,D [],[F,H] [E,G,H],[F,H],再看剩下的列表里面,F开头的比E多,取F,去掉F,[H], [E,G,H],[H]
    # 现在发现H有两个头,但是还有一个H不在头上,不取,所以依次取E,G,H
  • 相关阅读:
    java中日期格式的转换和应用
    struts2下载
    struts2上传
    div下拉框(待改善)
    jsp中jquery用法一步刷新 验证用户名是否存在
    react 解析json
    babel-polyfill 解决浏览器兼容
    页面跳转缓存 keepAlive
    webpack知识点
    element-ui upload
  • 原文地址:https://www.cnblogs.com/yfjly/p/10596677.html
Copyright © 2011-2022 走看看