2011-09-21 49 views
0

我無法弄清楚我做錯了什麼。我必須創建一個嵌套列表(對問題可能的解決方案),所以我創建了一個類,將解決方案附加到現有解決方案列表中(因爲每個解決方案一次只能計算一個)在python中創建一個嵌套列表類

此函數可用精細:

def appendList(list): 
    #print list 
    list2.append(list) 

x =0 
while x < 10: 
    x = x+1 
    one = "one" 
    two = "two" 
    appendList([(one), (two)]) 

print list2 

與結果:

[['one', 'two'], ['one', 'two'], ['one', 'two'], ['one', 'two'], ['one', 'two'], ['one', 'two'], ['one', 'two'], ['one', 'two'], ['one', 'two'], ['one', 'two']] 

但是當我藉此完全一樣的功能,並把它放在一個班,我得到一個錯誤說:

TypeError: appendList() takes exactly 1 argument (2 given) 

這裏的班級,我怎麼稱呼它:

class SolutionsAppendList: 
    list2 = [] 
    def appendList(list): 
    #print list 
     list2.append(list) 
appendList.appendList([('one'), ('two')]) 

我敢肯定,我正在做一個很基本的錯誤,但我似乎無法找出原因,因爲我在課堂上使用了相同的功能。

任何建議/建議將是偉大的。 由於

回答

2

既然你連班在這裏處理,它使用instance variables是很重要的。這些可以通過使用self關鍵字進行訪問。如果你正在處理類方法,一定要讓他們的第一個參數self。所以,修改...

class SolutionsAppendList: 
    def __init__(self): 
     self.list = [] 

    def appendList(self, list): 
    #print list 
     self.list.append(list) 

這很酷的是,你不再需要list2。實例變量(self.list)。與局部變量不同(您將list傳遞給appendList()方法)。編輯:我還添加了一個__init__方法,該方法在創建SolutionsAppendList對象的實例後調用。在我的第一個回覆中,我忽略了self.*在方法外部不可用的事實,這是編輯後的代碼。大衛)。

+0

'self'是不是一個法外定義,所以'self.list = []'不會在這裏工作,這聲明應該放在'__init__'中 –

+0

你說得對,我不知道爲什麼我忽略了這個。 –

+0

非常感謝。我喜歡你的解決方案。我將繼續添加列表,並且當我想要訪問它我只需鍵入'print appendList.list'是否有效?還是有更好的方法來訪問我追加的列表? – Lostsoul

1

它應該是:

class SolutionsAppendList: 
    list2 = [] 
    def appendList(self, list): 
    #print list 
     self.list2.append(list) 

類方法應該始終有自(參考實例)作爲第一個參數。

+1

沒有。'self.list2.append' – JBernardo

+0

真,錯過了。 – Avaris

2

使用類實例時,特殊變量self始終作爲方法調用的第一個參數傳遞。您需要修改你的函數聲明,以適應這一點:

class SolutionList: 
    def appendList(self, list): 
    #rest of your function here. 
相關問題