zoukankan      html  css  js  c++  java
  • 探索super()的执行顺序和__mro__方法

    class Base(object):
    
        def func(self):
            print('Base.func')
    
    class Foo(Base):
    
        def func(self):
            # 方式一:根据mro的顺序执行方法
            # super(Foo,self).func()
            # 方式二:主动执行Base类的方法
            # Base.func(self)
    
            print('Foo.func')
    
    
    obj = Foo()
    obj.func()

    上述代码单继承,子类中没有func方法会去父类中找。

    class Base(object):
    
        def func(self):
            super(Base, self).func()
            print('Base.func')
    
    class Bar(object):
        def func(self):
            print('Bar.func')
    
    class Foo(Base,Bar):
        pass
    
    # 示例一
    # obj = Foo()
    # obj.func()
    # print(Foo.__mro__)
    
    # 示例二
    # obj = Base()
    # obj.func()

    上述代码,示例一Foo中没有func方法,super()会按照继承顺序,先去Base中找,Base中没有再去Bar中找,所以执行结果为所以super是按照

    __mro__继承顺序执行的。

     Foo.__mro__的结果为:

     如果是示例二,则会报错,应为他的父类中没有相关方法。

  • 相关阅读:
    构建之法阅读笔记05
    四元数(Quaternion)
    httpclient
    两种unity双击事件
    WWW网络请求
    Unity混合天空盒
    unity message
    unity射线检测
    unity 初始化数据存储问题
    Awake,start,update,OnEnable,OnDisable
  • 原文地址:https://www.cnblogs.com/miaoweiye/p/11979575.html
Copyright © 2011-2022 走看看