2011-05-08 53 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