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__(),而是继续往下搜寻,直到最后。

  • 相关阅读:
    又爱又恨的eval
    http_build_query 这个方法会把值为NULL的给干掉
    allow_url_fopen设置
    纠结了下 B 和 STRONG标签区别
    Drupal 发邮件模块 drupal smtp 安装与设置
    php array_merge 和 两数组相加区别
    学历严格正相关于素质 Kai
    表语就是主语补语,靠 Kai
    一些真正有思想的up Kai
    光速不变且最大,换个思路想,非常合理,犹如天经地义【转载】 Kai
  • 原文地址:https://www.cnblogs.com/yaos/p/7071190.html
Copyright © 2011-2022 走看看