鱼C论坛

 找回密码
 立即注册
查看: 1509|回复: 2

[已解决]super函数

[复制链接]
发表于 2020-7-14 16:51:16 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 白白白白丶白 于 2020-7-14 16:58 编辑
class A():
    def go(self):
        print ("go A go!")
    def stop(self):
        print ("stop A stop!")
    def pause(self):
        raise Exception("Not Implemented")
class B(A):
    def go(self):
        super(B, self).go()
        print ("go B go!")
class C(A):
    def go(self):
        super(C, self).go()
        print ("go C go!")
    def stop(self):
        super(C, self).stop()
        print ("stop C stop!")
class D(B,C):
    def go(self):
        super(D, self).go()
        print ("go D go!")
    def stop(self):
        super(D, self).stop()
        print ("stop D stop!")
    def pause(self):
        print ("wait D wait!")
class E(B,C):
    pass
>>> d = D()
>>> d.go()
go A go!
go C go!
go B go!
go D go!

这里中间顺序为什么要先执行C(A)的方法,再执行B(A)的方法,记得小甲鱼有个 视频讲过,请问在第几期哦
最佳答案
2020-7-14 17:10:20
本帖最后由 Twilight6 于 2020-7-14 17:11 编辑


顺序你可以看下下面的扩展阅读,这里涉及了 方法解析顺序(Method Resolution Order,MRO)和 C3 算法:

MRO 的顺序基本就是:在避免同一类被调用多次的前提下,使用广度优先和从左到右的原则去寻找需要的属性和方法。

在继承体系中,C3 算法确保同一个类只会被搜寻一次。例子中,如果一个属性或方法在 D 类中没有被找到,Python 就会搜寻 B 类,然后搜索 C类,如果都没有找到,会继续搜索 B 的基类 A,如果还是没有找到,则抛出“AttributeError”异常。

-------扩展阅读


视频:
零基础入门学习Python 继承

扩展阅读:
多重继承的陷阱:钻石继承(菱形继承)问题

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-7-14 17:10:20 | 显示全部楼层    本楼为最佳答案   
本帖最后由 Twilight6 于 2020-7-14 17:11 编辑


顺序你可以看下下面的扩展阅读,这里涉及了 方法解析顺序(Method Resolution Order,MRO)和 C3 算法:

MRO 的顺序基本就是:在避免同一类被调用多次的前提下,使用广度优先和从左到右的原则去寻找需要的属性和方法。

在继承体系中,C3 算法确保同一个类只会被搜寻一次。例子中,如果一个属性或方法在 D 类中没有被找到,Python 就会搜寻 B 类,然后搜索 C类,如果都没有找到,会继续搜索 B 的基类 A,如果还是没有找到,则抛出“AttributeError”异常。

-------扩展阅读


视频:
零基础入门学习Python 继承

扩展阅读:
多重继承的陷阱:钻石继承(菱形继承)问题

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-14 17:11:47 | 显示全部楼层
本帖最后由 sunrise085 于 2020-7-14 17:13 编辑

38课
不理解的话,可以看看我这个帖子的总结
Python细节之6、类的多继承中super函数的调用顺序
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-20 02:00

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表