关于Python代码输出的疑问:为何输出6而非预期的10?
问题解析
你这段代码里有三个完全独立的value变量,分别属于不同的作用域:
- 全局变量
value = 6:定义在所有类和函数之外,属于全局命名空间 - 类A的类属性
value = 5:绑定在类A本身,存在于类的命名空间中 - 实例a的实例属性
a.value = 10:是你给实例a单独添加的属性,存在于实例a自己的命名空间里
当你执行print(value)时,Python会在当前的全局作用域里查找名为value的变量,找到的就是最开始定义的6,所以输出结果是6。
你预期输出10,应该是混淆了不同作用域的变量:
- 如果想打印实例a的属性,要写
print(a.value),这样会输出10 - 如果想打印类A的类属性,写
print(A.value),会输出5 - 只有直接修改全局变量
value = 新值,才会改变print(value)的输出
内容的提问来源于stack exchange,提问作者user23398578
相关产品推荐
相关产品推荐

