python类继承的问题

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

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632