加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

super真的是调用父类吗?

发布时间:2020-12-14 03:23:35 所属栏目:大数据 来源:网络整理
导读:# !/usr/bin/env python # -*- coding:utf-8 -*- # author:love_cat class A: def __init__ (self): print ( " A " ) class B(A): def __init__ (self): print ( " B " ) super(B,self). __init__ () class C(A): def __init__ (self): print ( " C " ) supe
#!/usr/bin/env python
# -*- coding:utf-8 -*- 
# author:love_cat

class A:
    def __init__(self):
        print("A")


class B(A):
    def __init__(self):
        print("B")
        super(B,self).__init__()


class C(A):
    def __init__(self):
        print("C")
        super(C,self).__init__()


class D(B,C):
    def __init__(self):
        print("D")
        super(D,self).__init__()


d = D()

# 那么会打印什么结果
# 我们可能会想到,d = D(),首先会打印D,再执行父类的init方法,然后打印B,然后打印A
# 所以运行结果应该是依次打印,D,B,A
# 然而运行结果是
‘‘‘
D
B
C
A
‘‘‘

# 为什么会是这样,首先说super调用父类其实不太准确,super调用是基于mro线性查找
print(D.__mro__)
‘‘‘
<class ‘__main__.D‘>,<class ‘__main__.B‘>,<class ‘__main__.C‘>,<class ‘__main__.A‘>,<class ‘object‘>)
‘‘‘
# 所以会依次调用类D,C,A的构造方法

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读