列表不在类定义中的方法之间传递

时间:2017-10-14 22:33:09

标签: python class methods

我正在尝试创建一个输入列表的简单类,然后使用名为“add”的函数追加到列表中,该函数也在同一个类中定义。

我一直收到这个错误:'list'对象没有属性'a'

class try1:
    def __init__(self, a=[]):
        self.a = a
        print(a)
        return

    def add(self, b=None):
        self.a.append(b)
        print(a)
        return

if __name__ == "__main__":
    c=try1(['a', 'b', 'c'])
    d = ['d', 'e', 'f']
    try1.add(d)

2 个答案:

答案 0 :(得分:4)

你在这里遇到了一些不同的事情会导致这种奇怪的错误。

核心问题是,您尝试在 add上调用try1,而不是刚刚创建的实例,变量c。将try1.add(d)更改为c.add(d)会产生预期结果(如果您还删除print(a)或将其更改为print(self.a),因为该范围内不存在a )。

不相关的错误是因为您使b成为关键字参数。当您尝试调用try1.add时,第一个参数在方法内变为self。然后你得到AttributeError,因为self是一个列表,显然没有名为a的属性。

另外,你shouldn't use a mutable as a default argument。此外,您不需要空return语句:任何没有return语句的函数都会隐式返回None

答案 1 :(得分:0)

这里有一些事情。首先,修复缩进。 Python确实是关于空白的。假设您修复了缩进,您将遇到其他几个问题。在main方法中,您希望调用c.add(d)(我认为)。

您可能在第9行遇到错误,这是我认为您正在谈论的错误。在您的方法范围内,变量a尚不存在。但self.a确实如此。您可能打算打印self.a

作为旁注,Python中的类名应以大写字母开头。数字是允许的,但我真的试图避免它们。