Python(OOP)列表附加错误

时间:2015-07-02 22:57:16

标签: python class oop

需要一点洞察力。我有以下python代码:

>>> class invader:
...     def __init__(self):
                // list
...             self.parameters = []
...
...     def parameters(self):
...             param = self.parameters
...             param.append('3')
... 
>>> invade = invader()
>>> invade.parameters()

在终端中运行此命令会产生以下错误消息:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'list' object is not callable

我该如何解决这个问题?

4 个答案:

答案 0 :(得分:3)

您的问题是对您的属性和方法使用相同的名称,将self.parameters重命名为self.param并在您的方法中使用self.param

class invader:
   def __init__(self):
     self.param = []

   def parameters(self):
      self.param.append('3')

invade = invader()
invade.parameters()
print(invade.param)

答案 1 :(得分:1)

在最后一行:

invade.parameters()

您实际上正在使用列表parameters作为函数。 (注意最后的()

做一个

print invade.parameters 

将让您查看列表的内容并删除运行时错误

答案 2 :(得分:1)

您的方法和属性都包含相同的名称parameters,因此您可以在此处执行以下操作:

def parameters(self):
    self._parameters.append('3')

使用下划线封装属性是很常见的,尤其是使用相同名称的方法。

答案 3 :(得分:0)

您的方法和属性包含相同的名称parameters。由于数据属性将覆盖具有相同名称的方法属性。所以invade.parameters是列表,而不是函数。您应该重命名您的功能,例如append_parameters 如果您想拨打parameters功能,可以尝试这种方式:invader.parameters(invade)。但不建议使用