在python中创建一个嵌套的列表类

时间:2011-09-21 19:33:22

标签: 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')])

我确定我犯了一个非常基本的错误,但我似乎无法弄清楚为什么,因为我在课堂上使用相同的功能。

任何建议/建议都会很棒。 感谢

3 个答案:

答案 0 :(得分:2)

使用类实例时,特殊变量self始终作为方法调用的第一个参数传递。您需要修改函数声明以适应这一点:

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

答案 1 :(得分: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.*不可用的事实在方法之外。这是编辑过的代码(感谢大卫)。

答案 2 :(得分:1)

应该是:

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

类方法应始终将self(引用实例)作为第一个参数。