zoukankan      html  css  js  c++  java
  • 理解Python中的继承规则和继承顺序

    先来看一段代码:

    class First(object):
        def __init__(self):
            print ("first")
    
    
    class Second(object):
        def __init__(self):
            print ("second")
    
    
    class Third(object):
        def __init__(self):
            print ("third")
    
    
    class Forth(object):
        def __init__(self):
            print ("forth")
    
    
    class Five(First, Second, Third, Forth):
        def __init__(self):
            print ("that's it")
    
    a = Five()
    
    

    这段代码的输出结果是:

    that's it
    

    也就是说,在class Five中的def__init__(self)override了父类(classes: First, Second, Third, Forth)的def__init__(self)

    class First(object):
        def __init__(self):
            print ("first")
    
    
    class Second(object):
        def __init__(self):
            print ("second")
    
    
    class Third(object):
        def __init__(self):
            print ("third")
    
    
    class Forth(object):
        def __init__(self):
            print ("forth")
    
    
    class Five(First, Second, Third, Forth):
        def __init__(self):
            super().__init()__
            print ("that's it")
    
    a = Five()
    
    

    输出结果是:

    first
    that's it
    

    也就是说,class Five先继承了父类 Firstdef __init__(self),然后执行自己重新定义的def __init__(self)

    如果在所有父类中也使用super().__init__,事情变得有趣:

    class First(object):
        def __init__(self):
            super().__init__()
            print ("first")
    
    
    class Second(object):
        def __init__(self):
            super().__init__()
            print ("second")
    
    
    class Third(object):
        def __init__(self):
            super().__init__()
            print ("third")
    
    
    class Forth(object):
        def __init__(self):
            super().__init__()
            print ("forth")
    
    
    class Five(First, Second, Third, Forth):
        def __init__(self):
            super().__init__()
            print ("that's it")
    
    a = Five()
    

    这段代码的输出结果是:

    forth
    third
    second
    first
    that's it
    

    也就是说,如果在父类中都加入super()class Five执行父类中def __init__()的顺序是class Forth -> class Third -> class Second -> class First

    也就是说,class Five在继承了class First后,不会马上停止并执行class FIrst中的def __init__(),而是继续往下搜寻,直到最后。

  • 相关阅读:
    jquery sortable 在ie中拖动的后tabs不显示解决了
    光标是停在文本框文字的最后 ie
    PetShop安装
    Python小题目 针对快速教程
    vb升级到vb.net的一些文章(downmoon收集自msdn)
    [算法 笔记]大根堆
    [More Effective C++ 学习笔记]异常
    [More Effective C++ 学习笔记]效率
    [TCP IP详解:学习笔记]TCP定时器
    【Linux 编程】pthead_cond_t 的使用
  • 原文地址:https://www.cnblogs.com/yaos/p/14014328.html
Copyright © 2011-2022 走看看