2011-08-23 41 views
1

爲什麼下面的代碼在我添加了幾個項目後返回空?python類像列表一樣行爲

class Con(list): 

    def __init__(self): pass 

    def __str__(self): 
     return ' '.join(self) 

    def add(self, value) 
     self.append(value) 

i for i in range(10): 
    Con().add(i) 

>>> print Con() 
# empty space instead of: 
0 1 2 3 4 5 6 7 8 9 

還有什麼我必須定義爲我的類表現得像一個列表?

回答

8

您總是在循環的每次迭代中創建一個新的con實例。您必須在循環前創建實例並添加到該實例。此外,你正在打印語句中創建另一個新實例,所以它也會變成空的。

+0

好啊,傻我。謝謝 – Shaokan

+0

...你缺少一個':'在線'def add(self,value)' –

5

您正在通過循環調用Con()來創建Con的11個實例,並且每次打印時都會再次調用Con()

你想要的東西,如:

c = Con() 
for i in range(10): 
    c.add(i) 

print c 
+0

Downvoter:關心評論我爲什麼錯了? – geoffspear

2

的原因是,你不救CON的任何實例。在每個Con()上創建一個新實例。你必須把它保存在這樣的地方:

c = Con() 
for i in range(10): 
    c.add(i) 

>>> print c 
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 
+0

你真的運行過嗎? – NullUserException

+0

是的,我確實運行過它。 – Pit