Python类继承输出解析:为何得到10 10 10 12 24 10?
理解Python类属性的继承与修改逻辑
先把你的代码格式化得更清晰些:
class A: x = 10 class B(A): pass class C(A): pass print(A.x) print(B.x) print(C.x) A.x += 2 B.x *= 2 C.x -= 2 print(A.x) print(B.x) print(C.x)
接下来咱们一步步拆解每一步的输出原因,搞懂背后的逻辑:
初始阶段(前三个print)
- 类
A定义了一个类属性x = 10,这个属性属于类本身,不是类的实例。 - 类
B和C都继承自A,而且没有定义自己的x属性。当我们访问B.x或C.x时,Python会沿着继承链向上查找,最终找到父类A的x属性。 - 所以前三个
print的结果都是10。
修改阶段(中间的赋值操作)
A.x += 2:这是直接修改类A的类属性,A.x从10变成了12。此时B和C仍然没有自己的x属性,还是会指向A的x。B.x *= 2:这一步是关键!Python会先查找B的x属性——找不到,就去父类A取当前的x值(也就是12),计算12 * 2 = 24,然后给类B创建一个属于自己的类属性x,赋值为24。从这之后,B.x就和A.x彻底没关系了。C.x -= 2:和B的操作逻辑完全一致,先从A取x=12,计算12 - 2 = 10,然后给类C创建自己的类属性x,赋值为10。之后C.x也不再依赖A.x。
最终阶段(后三个print)
A.x:我们之前直接修改了A的属性,所以结果是12。B.x:B现在有自己独立的x属性,值是24,所以输出24。C.x:C也有了自己的x属性,值是10,所以输出10。
把这些结果连起来,就是你看到的:10 10 10 12 24 10。
内容的提问来源于stack exchange,提问作者Sumeet Singh
相关产品推荐
相关产品推荐

