我写了以下代码,
#sanitize fuction
def sanitize(time_string):
if '-' in time_string:
splitter = '-'
elif ':' in time_string:
splitter = ':'
else:
return(time_string)
(mins, secs) = time_string.split(splitter)
return(mins + '.' + secs)
class AthleteList(list):
def __init__(self, a_name, a_dob=None, a_times=[]):
list.__init__([])
self.name = a_name
self.dob = a_dob
self.extend = a_times
def top3(self):
return(sorted(set([sanitize(t) for t in self]))[0:3])
#get coach data fuction
def get_coach_data(filename):
try:
with open(filename) as f:
data = f.readline()
templ = data.strip().split(',')
return(AthleteList(templ.pop(0), templ.pop(0), templ))
except IOError as ioerr:
print('File error: ' + str(ioerr))
return(None)
sarah = get_coach_data("sarah2.txt")
julie = get_coach_data("julie2.txt")
james = get_coach_data("james2.txt")
mikey= get_coach_data("mikey2.txt")
vera = AthleteList('vera')
vera.append('1.33')
vera.extend(['1.74','1.46','1.42','1.40'])
print(vera.top3())
运行此代码时,会显示以下错误。 但是当我使用extend方法时它只显示错误。 我可以使用没有probs的append方法。
vera.extend([&#39; 1.74&#39;&#39; 1.46&#39;&#39; 1.42&#39;&#39; 1.40&#39;])< / p>
TypeError:&#39; list&#39;对象不可调用
答案 0 :(得分:1)
要访问列表,您需要使用方括号([])而不是括号(())。
而不是
vera.extend(['1.74','1.46','1.42','1.40'])
使用
aList = ['1.74','1.46','1.42','1.40']
vera.extend(aList)
答案 1 :(得分:1)
遵循AthleteList('vera')
的执行路径,注意self.extend
如何初始化为列表,这会影响您期望的功能。
发生的事情基本上是这样的:
>>> extend = []
>>> extend(['foo'])
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'list' object is not callable
答案 2 :(得分:0)
您基本上是在尝试调用列表(self.extend = a_times
和a_times = []
),这是不可能的。
您需要做的是:
vera.extend.extend(['1.74','1.46','1.42','1.40'])
或者这个(如前所述):
vera.extend = ['1.74','1.46','1.42','1.40']
但实际上这也不完全正确(假设我们需要vera
列表而不是vera.extend
一个[在首次发布时错过了这个,抱歉!]),如下所示:
>>> vera = AthleteList("vera")
>>> vera.extend = ['1.74','1.46','1.42','1.40']
>>> print(vera.top3())
[]
>>> vera.extend.extend(['1.74','1.46','1.42','1.40'])
>>> print(vera.top3())
[]
正确的答案是从AthleteList类中移除self.extend,使其按您希望的方式工作(vera.extend(['1.74','1.46','1.42','1.40'])
)。
>>> vera = AthleteList("vera")
>>> vera.extend(['1.74','1.46','1.42','1.40'])
>>> print(vera.top3())
['1.40', '1.42', '1.46']
所以,上课应该是这样的:
class AthleteList(list):
def __init__(self, a_name, a_dob=None, a_times=[]):
list.__init__([])
self.name = a_name
self.dob = a_dob
def top3(self):
return(sorted(set([sanitize(t) for t in self]))[0:3])
希望它有所帮助!
答案 3 :(得分:0)
根据你的代码,你已经将一个类变量扩展为一个empt列表。
self.extend = a_times
其中a_times = []
根据您的代码,它是变量,不是函数。这就是为什么它会抛出' not callable '
的错误更改以下代码行:
vera.extend(['1.74','1.46','1.42','1.40'])
至vera.extend = ['1.74','1.46','1.42','1.40']
。
希望它有所帮助!