You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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。

修改阶段(中间的赋值操作)

  1. A.x += 2:这是直接修改类A的类属性,A.x从10变成了12。此时B和C仍然没有自己的x属性,还是会指向A的x。
  2. B.x *= 2:这一步是关键!Python会先查找B的x属性——找不到,就去父类A取当前的x值(也就是12),计算12 * 2 = 24,然后给类B创建一个属于自己的类属性x,赋值为24。从这之后,B.x就和A.x彻底没关系了。
  3. 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 07:07:08