不理解此类型错误:“list”对象不是callab

2024-10-02 14:28:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个名为im.py的文件,它包含几个函数和几个类。第一个函数和类因

TypeError: 'list' object is not callable

问题似乎是函数中创建的列表的第一个元素,然后传递给类。大多数列表可以由类处理,但第一个元素不能。转换到类名空间似乎是个问题:

^{pr2}$

在交互式会话中,所有功能都很好:

>>> from im import *
>>> a = getdata_user()
>>> print(a)
['fred', [4, 24, 27, 30, 46, 109, 125, 1000], '/home/fred']
>>> print(a[0])
jreese
>>> print(a[1])
[4, 24, 27, 30, 46, 109, 125, 1000]
>>> print(a[2])
/home/fred

但在课堂上:

>>> b = FirstClass()
>>> b.setdata_user()
>>> print(b.home())
/home/jreese
>>> print(b.gids())
[4, 24, 27, 30, 46, 109, 125, 1000]
>>> print(b.user())
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'list' object is not callable

所以,简单回顾一下:

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

>>> type(a[0])
<class 'str'>

所以问题很明显。我只是不知道类转换是如何屏蔽列表的第一个元素。有什么想法吗?在


Tags: 函数元素home列表objectisnotfred
2条回答

Python不同于其他一些语言,其中字段和方法可以共享相同的名称(例如Java)。在Python中,当给实例属性指定与方法相同的名称时,该方法将被该属性隐藏。在

然而,一般情况下,python避免使用getter和setter,因为它们在python中提供的好处与在静态类型语言(如Java)中所提供的好处不同。在

在Python中,您更可能执行以下操作:

^{1}$

方法和属性不能同时使用相同的名称;方法只是特殊类型的属性。您的类可能有一个user()方法,但是通过在实例上设置属性user,当您试图访问b.user时,Python将找到该方法而不是该方法:

^{1}$

必须将方法或属性重命名为不冲突。可以在list属性中使用前导下划线,例如:

^{pr2}$

相关问题 更多 >