zoukankan      html  css  js  c++  java
  • 类的继承顺序

    要背的内容

    1. 只要继承object类就是新式类
    2. 不继承object类的都是经典类

    在python3中 所有的类都继承object类,都是新式类

    在python2中 不继承object的类都是经典类,继承object类的就是新式类了

    经典类:在py3中不存是,在py2中不主动继承object的类

    在py2中
    class A:pass   #经典类
    class B(object):pass#新式类
    
    在py3中
    class A:  #pass #新式类
    class B(object):pass #新式类
    

    在单继承方面(无论是新式类还是经典类都是一样的)

    class A:
        def func(self):pass
    class B(A):
        def func(self):pass
    class C(B):
        def func(self):pass
    class D(c):
        def func(self):pass
    d = D()
    
    寻找某一个方法的顺序:D->C->B->A
    越往父类走,是深度
    

    多继承

    class A:
        def func(self):
            print('A')
    class B(A):
        def func(self):
            print('B')
    class C(A):
        def func(Self):
            print(C)
    class D(B,C):
        def func(self):
            print('B')
    print(D.mro()) #只在新式类中有,经典类没有
    d = D()
    d.func()
    在走到一个点,下一个点既可以深度走,也可以从广度走的时候,总是先走广度,再走深度,广度优先
    在经典类总,都是深度优先,总是在一条路走不通之后再换一条路,走过的点不会再走了
    

    C3算法

    算法内容:

    1. 如果是单继承 那么总是按照从子类->父类的顺序来计算查找顺序
    2. 如果是多继承 需要按照自己本类,父类1的继承顺序,父类2的继承顺序
    3. merge的规则:如果一个类出现在从左到右所有顺序的最左侧,并没有在其他位置出现,那么先提出了作为继承顺序中的一个 或 一个类出现在从左到右顺序的最左侧,并没有在其他顺序出现那么先提出了作为继承顺序中的第一个
    4. 如果从左到右第一个顺序中的第一个类出现在后面且不是第一个,那么不能提取,顺序向后继续找其他顺序中父类上述条件的类
  • 相关阅读:
    C++中Map的使用 (个人简单的对于String的使用)
    具体数学二项式至生成函数章-----致敬Kunth
    C++中String的使用
    C++中Set的使用
    费马小定理,欧拉函数
    数论---同余法则定理
    灵活利用单链表,顺带一提可持久化链表。
    第2章 数字之魅——数字中的技巧
    Mail.Ru Cup 2018 Round 1
    Lyft Level 5 Challenge 2018
  • 原文地址:https://www.cnblogs.com/wang-xing-hao/p/11172710.html
Copyright © 2011-2022 走看看