需要一点洞察力。我有以下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
我该如何解决这个问题?
答案 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)
。但不建议使用