output 的顺序不太理解
class Level1:
variable_1 = 100
def __init__(self):
self.var_1 = 101
def fun_1(self):
print("3")
return 102
class Level2(Level1):
variable_2 = 200
def __init__(self):
super().__init__()
self.var_2 = 201
def fun_2(self):
super().fun_1()
print("2")
return 202
class Level3(Level2):
variable_3 = 300
def __init__(self):
super().__init__()
self.var_3 = 301
def fun_3(self):
super().fun_2()
print("1")
return 302
obj = Level3()
print(obj.variable_1, obj.var_1, obj.fun_1())
print(obj.variable_2, obj.var_2, obj.fun_2())
print(obj.variable_3, obj.var_3, obj.fun_3())
output:
3
100 101 102
3
2
200 201 202
3
2
1
300 301 302
为什么3 3 2 3 2 1会以这样的顺序出现
这与继承没有多少关系,就是函数的嵌套调用
先是print(obj.variable_1, obj.var_1, obj.fun_1())
是先调用obj.fun_1() print("3")输出 3 之后 return返回 102
再执行print(obj.variable_1, obj.var_1, 返回的102) 输出100 101 102
再是print(obj.variable_2, obj.var_2, obj.fun_2())
是先调用obj.fun_2() , 在fun_2() 中先执行 super().fun_1() print("3")输出 3 之后再返回fun_2()中 print("2")输出 2
最后print(obj.variable_3, obj.var_3, obj.fun_3())
也是先调用obj.fun_3() , 在fun_3() 中先执行 super().fun_2() 在fun_2() 中又先执行 super().fun_1() print("3")输出 3 之后再返回fun_2()中 print("2")输出 2 再返回fun_3()中 print("1")输出 1