python 3 继承内置 list 对象问题

2015-10-04 18:18:14 +08:00
 Ansen


这里怎么没有继承到内置的 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()))
3433 次点击
所在节点    Python
9 条回复
WhiteSaber
2015-10-04 18:35:26 +08:00
首先请把你哪个按照 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__ ?
可能是你拼写错误而已
swustxxl
2015-10-04 20:40:34 +08:00
@zzbond0517
这是从 head first python 第 210 页 中原样抄出的代码,要错也是书里面写出了,但个人觉得这本书还是比较靠谱的(看样子每个程序貌似都经过调试的),或许是编书的时候忽略了某些前提,导致程序报错,碍于经验不足,找不出问题。
python IDLE 好像没有行号
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
swustxxl
2015-10-04 20:45:42 +08:00
@zzbond0517 关于 list.__int__([])
书中的解释是:初始化所派生的类
Kisesy
2015-10-04 20:49:20 +08:00
把 __int__ 改成 __init__
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
Kisesy
2015-10-04 21:45:12 +08:00
我测试没错
输出: James Lee's fastest times are:['2.01', '2.16', '2.22']
twor2
2015-10-05 02:48:15 +08:00
1. 复制你给代码
2. 去掉注释, 使用代码数据测试
3. 改__int__成__init__
4. 2.7 和 3.5 不报错,测试 ok 的。
twor2
2015-10-05 03:56:21 +08:00
新手练习

--

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/225586

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX