class A():
def __init__(self, name):
print('A的class' ,self.__class__, name)
class B(A):
def __init__(self, name):
self._name = name
A.__init__(self, name)
print('B的class', self.__class__, name)
print('this is B class')
class C(B):
def __init__(self, name):
B.__init__(self, name)
print('C的class')
if __name__ == '__main__':
c = C('lee')
输出如下:
this is B class
A class <class '__main__.C'> lee
B class <class '__main__.C'> lee
C class
- 首先对class C()进行实例化,从头到尾扫一遍,然后进入C()的构造,遇到了父类C()的构造方法B.init 。
- 进入class B(),从头到尾扫一遍,执行了print(‘this is B class’)语句然后进入B()的构造,遇到了父类B()的构造方法A.init。
- 进入classA(),从头到尾扫一遍,然后进入A()的构造方法A.init。然后A.__init__执行完毕并弹出栈,class A()执行完毕并弹出栈。
- 回到class B(),从上次未执行完的地方print(‘B的class’, self.class,name)继续执行。然后B.__init__执行完毕并弹出栈,class B()执行完毕并弹出栈。
- 回到class C(),从上次未执行完的地方print(‘C的class’)继续执行。然后C.__init__执行完毕并弹出栈,class C()执行完毕并弹出栈。程序运行完毕。
- 由于是对class C()进行实例化,上面的self都是指class C()的实例而不是class A()的或者class B()的。因此self.__class__清一色的显示<class ‘main.C’>而不是<class ‘main.A’>或<class ‘main.B’> 。