无法理解python中的某些类代码

时间:2011-05-08 01:10:19

标签: python

我对编程很陌生,在理解这段代码的输出时遇到了一些麻烦。

#testclass.py

class TestCount:
    count = 0
    def __init__(self):
        self.attr1 = TestCount.count
        self.attr2 = TestCount.count + 1
        TestCount.count += 2

x = TestCount()
y = TestCount()

print(x.attr1, x.attr2)
print(y.attr1, y.attr2)

这是我正在学习的一本书中的一个更大的例子的返工。运行此代码时,它会给出:

0 1
2 3

我希望它是:

0 1
0 1

我在这里失踪的根本是什么?我认为y是一个新的实例,但它似乎在x离开的地方。对不起,如果我没有清楚地解释自己,但我是新来的。

2 个答案:

答案 0 :(得分:2)

count的属性,而不是实例。这意味着所有实例都会共享

您正在使用attr1初始化TestCount.count,然后将其增加2。因此,第二个实例将以attr1设置为2,第三个实例4等开始。

如果您希望使用attr1attr2初始化这两个属性(01),则应该这样做:

class TestCount:
    def __init__(self):
        self.attr1 = 0
        self.attr2 = 1

对于矿石信息,我建议阅读官方Python教程中的Classes部分。

答案 1 :(得分:1)

因为您在类体中定义了TestCount.count,所以它成为一个在所有对象之间共享的静态变量。因此TestCount.count的{​​{1}}与<{1}}的{​​{1}} 相同的对象

这就是:

x