zoukankan      html  css  js  c++  java
  • <转>Python中的新式/经典类的查找方式

    在学习到深度和广度的时候,懵了很久.后来看到这篇文章,恍然大悟.写的很好.特意转过来.

    经典类: 只要有父类, 就会沿着一直找, 即使已经找过了~

    新式类: 在类继承的多个类拥有共同父类的情况下, 会优先横向查找, 直到剩下最后一个继承自这个共同父类的对象, 再向上查找.

    如果类仅继承一个父类的情况下,会继续向上查找.

    新式类和经典类对方法查找方式有区别. 我们称之为广度优先和深度优先. 

    但很多人会误会这句话的意思.

    我们来看一个例子:

    大家可能会理解为这种查找方式, 但是实际上, 不是的, 如果方法没找到的情况下, 且只有一个条继承的路线, 那么就会沿着这条路线继续向上找. 说的有点晕乎, 我们看例子:

    这里我们可以这么理解, E 继承自B, C, D 而B, C, D又同时继承自A, 所以查找的思路是这样的.

    • E 首先找到B, 发现B 与C, D共享A, 就不再向上找, 横向查找.
    • E 于是找到了C, 发现 C 与 D共享A, 于是也不再向上找, 又开始横向查找
    • E 再找到了D, 此时只有D这么最后一根线连着A了, 便开始沿着D的继承关系, 找到了A

    如果到这里, 你已经明白了, 可以尝试着看看这题:




    下面是这道题的答案, 在分析一下

    1. A先找到B, B继承自E且只有B继承自E, 所以找E , 同理发现E继承且只有E继承自H , 于是找H , 再找到J
    2. 再开始找C ,发现C继承且仅有C继承自F, 于是开始找F, 开始找F, 发现F与I共同继承自K, 于是放弃向上找
    3. 开始找D, D上与之前类似, 都是继承且仅仅只有一个继承关系, 一直到I, 发现除去刚刚找过的F之外, 已经没有其他类继承自K了, 于是I就向上走, 找到K

    再来试试

    答案:

    如果到这里, 你都对了, 那么新式类的方法查找路径你就理解了.

    现在再来说说经典类. 就是一句话, 只要有爹就一路向上走.

    我们按照经典类的方法查找路径去写写刚刚这道题.

    这里给出答案 A B C E F G D E F G.

    总结一下方法查找的区别:

    经典类: 只要有父类, 就会沿着一直找, 即使已经找过了~

    新式类: 在类继承的多个类拥有共同父类的情况下, 会优先横向查找, 直到剩下最后一个继承自这个共同父类的对象, 再向上查找.



    作者:咸鱼永动机
    链接:https://www.jianshu.com/p/a1966ac2c39b
    來源:简书
    简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。
  • 相关阅读:
    为什么我的tomcat启动不起来?
    图解leetcode —— 128. 最长连续序列
    java实现单链表增删改查
    搞定java String校招面试题
    java反射快速入门
    java中线程安全,线程死锁,线程通信快速入门
    理清Java中try-catch-finally带return的执行顺序
    Java可变参数与Collections工具类使用了解
    HashMap常见面试题整理
    ArrayList去除重复元素(多种方法实现)
  • 原文地址:https://www.cnblogs.com/lovepy3/p/9250325.html
Copyright © 2011-2022 走看看