Python菱形继承(网易面试题)

菱形继承顾名思义,是一个菱形继承(好像是废话),直接上图

 

 菱形继承就是多继承,例上图所有,A是父类,B和C是A的子类,B和C是D的父类。

class Parent(object): def __init__(self, name): print('Parent开始被调用') self.name = name print('Parent结束被调用') class Son1(Parent): def __init__(self, name, age, *args, **kwargs): print('Son1开始被调用') self.age = age super().__init__(name, *args, *kwargs) print('Son1结束被调用') class Son2(Parent): def __init__(self, name, gender, *args, **kwargs): print('Son2开始被调用') self.gender = gender super().__init__(name, *args, **kwargs) print('Son2结束被调用') class UserFroile(Son1, Son2): def __init__(self, name, age, gender): print('UserFroile开始被调用') super().__init__(name, age, gender) print('UserFroile结束被调用') print(UserFroile.__mro__) UF = UserFroile('wangchengyang', 21, '') print("姓名:", UF.name) print("年龄:", UF.age) print("性别:", UF.gender)

结果如下:

 

注意:在上面模块中,当在子类中通过super调用父类方法时,parent被执行了1次。

super调用过程:上面gs初始化时,先执行grandson中init方法, 其中的init有super调用,每执行到一次super时,都会从__mro__方法元组中顺序查找搜索。所以先调用son1的init方法,在son1中又有super调用,这个时候就就根据__mro__表去调用son2的init,然后在son2中又有super调用,这个就根据mro表又去调用parent中的init,直到调用object中的init. 所以上面的打印结果如此,要仔细分析执行过程。

 


__EOF__

本文作者汪成阳
本文链接https://www.cnblogs.com/wangchengyang/p/16730895.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   非非非常帅的辰  阅读(231)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示

喜欢请打赏

扫描二维码打赏

支付宝打赏