这里怎么没有继承到内置的 list
ps:
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 __int__(self,a_name,a_dob=None,a_times=[]):
list.__int__([])
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])
def get_coach_data(filename):
try:
with open(filename)as f:
data=f.readline()
temp1=data.strip().split(',')
return(AthleteList(temp1.pop(0),temp1.pop(0),temp1))
except IOError as ioerr:
print('File Error:'+str(ioerr))
return(None)
'''vera=AthleteList('vera vi')
vera.append('1.31')
print(vera.top3())
vera.extend(['2.22','1-21','2:22'])
print(vera.top3())'''
james=get_coach_data('james2.txt')
print(james.name+"'s fastest times are:"+str(james.top3()))
1
WhiteSaber 2015-10-04 18:35:26 +08:00 1
首先请把你哪个按照 python 送的编辑器里面的行号打开
其次,他爆的是这句话 return(AthleteList(temp1.pop(0),temp1.pop(0),temp1)) 根据 list 的文档,要求传入的是一个可迭代对象 class list([iterable]) https://docs.python.org/2/library/functions.html?highlight=list#list 而你代码想要做的是调用他的__init__ ? 可能是你拼写错误而已 |
2
swustxxl 2015-10-04 20:40:34 +08:00
@zzbond0517
这是从 head first python 第 210 页 中原样抄出的代码,要错也是书里面写出了,但个人觉得这本书还是比较靠谱的(看样子每个程序貌似都经过调试的),或许是编书的时候忽略了某些前提,导致程序报错,碍于经验不足,找不出问题。 python IDLE 好像没有行号 |
3
swustxxl 2015-10-04 20:42:41 +08:00
代码中, james2.txt 的内容:
James Lee,2002-3-14,2-34,3:21,2.34,2.45,3.01,2:01,2:01,3:10,2-22,2-01,2.01,2:16 |
4
swustxxl 2015-10-04 20:45:42 +08:00
@zzbond0517 关于 list.__int__([])
书中的解释是:初始化所派生的类 |
5
Kisesy 2015-10-04 20:49:20 +08:00
把 __int__ 改成 __init__
|
6
swustxxl 2015-10-04 21:07:51 +08:00
@Kisesy 嗯,确实敲错了,不好意思
不过继续报错,这回是这样的了 Traceback (most recent call last): File "C:\Python34\AthleteList\AthlelteList.py", line 37, in <module> print(james.name + "'s fastest times are: " + str(james.top3())) TypeError: can only concatenate list (not "str") to list |
7
Kisesy 2015-10-04 21:45:12 +08:00
我测试没错
输出: James Lee's fastest times are:['2.01', '2.16', '2.22'] |
8
twor2 2015-10-05 02:48:15 +08:00
1. 复制你给代码
2. 去掉注释, 使用代码数据测试 3. 改__int__成__init__ 4. 2.7 和 3.5 不报错,测试 ok 的。 |
9
twor2 2015-10-05 03:56:21 +08:00 1
|