2011-05-08 77 views
1

我对编程相当陌生,并且在理解此代码的输出时遇到了一些问题。无法理解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

count是的类的属性,而不是实例。这意味着这个值是所有实例的共享

您正在初始化attr1TestCount.count,稍后将其增加2。因此,二审将attr1开始被设置为2,对于第三个实例4

如果你想同时性能(attr1attr2)与01进行初始化,你应该这样做:

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

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

+0

谢谢,这有助于使更多一点感觉出来。 – Babyjeezus 2011-05-08 01:31:34

1

因为您在类体中定义了TestCount.count,它变成了一个静态变量,它在所有对象之间共享。因此xTestCount.count相同的对象作为的y

这是发生了什么:

x = TestCount() 
#x.attr1 = 0 
#x.attr2 = 0 + 1 
#TestCount.count += 2 #TestCount.count is now 2, it was 0 

y = TestCount() 
#y.attr1 = 2 
#y.attr2 = 2 + 1