【发布时间】:2015-05-26 09:24:26
【问题描述】:
我有一个名为im.py 的文件,其中包含几个函数和几个类。第一个函数和类失败了
TypeError: 'list' object is not callable
问题似乎是在函数中创建的列表的第一个元素,然后将其传递给类。大多数列表可以由类处理,但第一个元素不能。转换到类名称空间似乎是问题所在:
def getdata_user():
import os
user = os.getlogin()
gids = os.getgroups()
home = os.getenv('HOME')
return [user, gids, home]
class FirstClass:
def setdata_user(self):
self.user = getdata_user()
def displaydata_user(self):
print(self.user)
def user(self):
u = self.user[0]
return u
def gids(self):
g = self.user[1]
return g
def home(self):
h = self.user[2]
return h
在交互式会话中,功能一切正常:
>>> 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'>
所以很清楚是什么问题。我只是不知道类转换如何掩盖列表的第一个元素。有什么想法吗?
【问题讨论】:
-
print(b.user())正在尝试调用b.user,这是从getdata_user返回的list对象 - 不清楚为什么您会期待其他任何东西。跨度>
标签: python python-3.x oop methods attributes