super真的是调用父类吗?

#!/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,B,A的构造方法

猜你喜欢

转载自www.cnblogs.com/traditional/p/9219688.html