Python 类共享变量给出了意外的输出

标签 python class oop

基于对Shared Variables in Python Class的解释在这里,我希望以下代码的输出为:

123 123
200 200
300 300

不过是

123 123
200 123
200 300

代码:

class A:
    abc = 123
    def __init__(self, a,b,c):
        self._a = a
        self._b = b
        self._c = c


if __name__ == '__main__':
    a = A(2, 4, 6)
    b = A(3, 9, 27)

    print a.abc , b.abc
    a.abc = 200
    print a.abc , b.abc
    A.abc = 300
    print a.abc , b.abc

有人可以帮助理解这个吗?我的印象是共享变量与 C++ 类中的静态变量相同。打破这个神话的任何见解,如果是这样的话,也会有所帮助。

最佳答案

最初,类 A 有一个定义为 123 的 abcab 都使用它,因为它们都没有 abc 他们自己的。

然后你执行a.abc = 200,它为a创建了一个abcb 仍然使用 A 中的那个。

然后你执行 A.abc = 300,它更新 Aabcb 仍然看起来,所以它看到了新的值(value)。但是 a 有自己的 abc,所以不关心。

关于Python 类共享变量给出了意外的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39234297/

相关文章:

python - 计算python中两个向量之间的角度

java - 使用Java.io.*读取文件

java - 如何将我的 ClassLoader 设置为 JVM 的 ClassLoader 来加载所有类(包括 jar 类)?

java - 如何针对多个条件使用 View ,每个条件意味着禁用/启用不同的组件?

python - 如何按列表中的属性对对象进行分组和计数?

python - Collat​​z 猜想程序在高位随机停止准确

尽管已安装 Python 模块但未被检测到

c++ - 在 C++ 中声明可见性/访问的方式有何不同?

javascript - 从匿名函数中访问 "this"

java - 如何通过用户输入显示JOptionPane