我对编程很陌生,在理解这段代码的输出时遇到了一些麻烦。
#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离开的地方。对不起,如果我没有清楚地解释自己,但我是新来的。
答案 0 :(得分:2)
count
是类的属性,而不是实例。这意味着所有实例都会共享。
您正在使用attr1
初始化TestCount.count
,然后将其增加2
。因此,第二个实例将以attr1
设置为2
,第三个实例4
等开始。
如果您希望使用attr1
和attr2
初始化这两个属性(0
和1
),则应该这样做:
class TestCount:
def __init__(self):
self.attr1 = 0
self.attr2 = 1
对于矿石信息,我建议阅读官方Python教程中的Classes部分。
答案 1 :(得分:1)
因为您在类体中定义了TestCount.count
,所以它成为一个在所有对象之间共享的静态变量。因此TestCount.count
的{{1}}与<{1}}的{{1}} 相同的对象。
这就是:
x