#!/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的构造方法
super真的是调用父类吗?
猜你喜欢
转载自www.cnblogs.com/traditional/p/9219688.html
今日推荐
周排行