python - 为什么这个类变量在不同的实例中是相同的?

标签 python oop class

为什么即使创建了该类的新实例,i 仍然保持不变?

class Test(object):
    i = 0
    def add(self):
        Test.i += 1

运行此代码

t = Test()
print t.i
t.add()
t2 = Test()
print t2.i
print t.i

给予

0
1
1

为什么 t.i 和 t2.i 不都等于 0?难道它们不应该等于 0,因为 t2 = Test() 行会将 i 重置为 0?

最佳答案

i 是类变量,而不是实例变量。它绑定(bind)到类本身(这就是为什么您可以编写 Test.i,即使不存在 Test 实例)。

您必须使 i 成为实例变量:

class Test(object):
    def __init__(self):
        self.i = 0

    def add(self):
        self.i += 1

关于python - 为什么这个类变量在不同的实例中是相同的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15466824/

相关文章:

python - 如何在 TensorFlow session 中使用数据集进行训练

python - 如何在线程之间共享对象?

python - Dask - 如何将任务分配给特定的 CPU

java - 在基类中编写一个需要在子类中覆盖的方法实现?

javascript - jQuery、Javascript、对象表示法 - 回调行为差异的解释

php - 使用可变参数在 PHP 中以编程方式创建动态类实例?

python - 在Python中,如何在初始化时将类的每个新实例添加到列表中?

c++ - 如何在子类的 vector 上应用多态函数

抽象基类的 Django 模型字段

c++ - PyS60 与塞类 C++