• 多继承补充


    面向对象多继承

    1. __mro__和c3算法详解
        
        (1 )__mro__:
            python 类有多继承特性,如果继承关系太复杂,很难看出会先调用那个属性或方法。
    为了方便且快速地看清继承关系和顺序,可以用__mro__方法来获取这个类的调用顺序。
        
        (2) c3算法
        ss 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
        
        
        # print(E.__mro__)
        # print(H.__mro__)
        """
        L(Foo + L(E)  + L(H) )
        
        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
        """
        print(Foo.__mro__)
    
    2. 经典类和新式类
        a. 先找左再找右
            class A(object):
                pass
        
            class B(object):
                def f1(self):
                    print('B')
        
            class C(A, B):
                pass
        
            obj = C()
            obj.f1()
        
        b. 经典类和新式类
            py2:
                经典类: 
                新式类: 如果自己或自己的前辈只要有人继承了object, 那么此类就是新式类
            py3:
                新式类
                
            经典类和新式类的查找成员的顺序不一样.
                经典类, 一条道走到黑(深度优先).
                新式类, C3算法实现(python2.3更新时c3算法)
                
                    Foo + (C,D,F,G) + (G,D,G,W) + (I,G,D,G,W) 
                        
                    FOO,
                        获取第一个表头 和 其他表位进行比较
                            不存在则拿走
                            如果存在, 则放弃,然后获取第二个表的表头再次和其他表的表尾进行比较
                    
            简答,
                经典类, 一条道走到黑(深度优先)
                新式类, 留个根.(科学c3算法)
        
            注意事项:
                super是遵循__mro__执行顺序
  • 相关阅读:
    MOS
    1- Bluetooth开发
    1- Bluetooth
    MCU 51-10 Infrared Communication
    1- STM32 HAL库学习 GPIO配置点亮LED灯
    MCU 51-9 DS18B20 Temperature Sensor
    MCU 51-8 AD/DA
    C语言讲义——变量(variable)
    C语言讲义——注释
    C语言讲义——“编译、链接”
  • 原文地址:https://www.cnblogs.com/kangqi452/p/11617539.html
Copyright © 2020-2023  润新知