2017-10-14 23 views
1

我想创建一个输入列表的简单类,然后用名为“add”的函数追加到列表中,该函数也被定义在同一个类中。不在类定义内的方法之间传递的列表

我不断收到此错误:“名单”对象有没有属性“一”

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) 
+3

什么**完全**是你的缩进?我怀疑你的'add'定义在'class'块之外。 –

+2

无论您遇到什么其他问题,请阅读https://stackoverflow.com/q/1132941/3001761 – jonrsharpe

回答

4

你有一对夫妇不同的东西会在这里造成这个看起来怪怪的错误。

的核心问题是,你试图调用addtry1,而不是实例刚刚创建,在变量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

+0

谢谢! 我很欣赏增加的说明信息!我是一个非常绿色的编码器,所以一切都有点令人难以置信。 –

0

这里有几件事。首先,修复缩进。 Python对于空白非常具体。假设你修复缩进,你会遇到其他一些问题。在您的main方法中,您想要拨打c.add(d)(我认为)。

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

请注意,Python中的类名应该以大写字母开头。数字是允许的,但我会尽量避免它们。