zoukankan      html  css  js  c++  java
  • python2与python3对于多继承的不同策略

    以一个经典的祖孙族谱来解释这个问题:

    class Human:
        def __init__(self):
            print("I'm human")
    
    
    class Mother(Human):
        def __init__(self):
            print("I'm uncle")
    
    
    class Father(Human):
        def __init__(self):
            print("I'm father")
    
    
    class Son(Father,Mother):
        def __init__(self):
            print("I'm son")

    baby = son()

    以上代码的继承逻辑为:


    在经典类范围类,python2采用的是深度优先的继承方式,python采用的是广度优先的方式,下面我来解释一下为什么:

    (1)当把Son的初始化代码注释后,即

    class Son(Father,Mother):
    #     def __init__(sef):
    #         print("I'm son")

    此时,在python2和python3中的中运行的运行结果都为

    >> I'm father

    (2)当继续把Father的初始化代码注释后,即:

    class Father(Human):
        # def __init__(self):
        #     print("I'm father")

    python2中的中运行的运行结果为:

    >> I'm human

    python3中的中运行的运行结果为:

    >> I'm mother

    (3)当继续把Motherr的初始化代码注释后,即:

    class Mother(Human):
        # def __init__(self):
        #     print("I'm uncle")

    此时,在python2和python3中的中运行的运行结果都为

    >> I'm human

    因此python2的多继承策略可如下图红线路径示(深度优先):


    因此python3的多继承策略可如下图红线路径示(广度优先):

  • 相关阅读:
    Java基础知识_毕向东_Java基础视频教程笔记(5-10 面向对象)
    Java 运算符-=,+=混合计算详解
    VS Code 基本介绍 和 快捷键
    Access-Control-Allow-Origin 跨域问题
    Linux常用命令收藏
    常用正则表达式
    IntelliJ IDEA 快捷键列表
    PAT A除以B
    PAT 部分A+B
    PAT 德才论
  • 原文地址:https://www.cnblogs.com/erikchanBolg/p/10194322.html
Copyright © 2011-2022 走看看