面向对象编程python

2024-04-16 06:57:04 发布

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

我需要实现一个名为atcher的类,它接受__init__(self,names,fastest_time) 另一个名为fastest_time的方法将显示最快运动员的姓名和时间:

到目前为止,我有这个:

class Athlete:
    def __init__(self,names,ftime):
        self.name=names
        self.fastest=ftime
    def fastest_athlete(self):


names=(['sara','jam','mary'])
times=([90,50,75])
a=Athlete(name,ftime)
a.fastest_athlete()

问题:不知道是否需要遍历数组名“times”?不知道如何最快地实现这个方法。请帮助


Tags: 方法nameselftimenamesinitdef姓名
1条回答
网友
1楼 · 发布于 2024-04-16 06:57:04

您应该在数组上循环以创建Athletes

>>>Athletes = [Athlete(name, time) for name, time in zip(names, times)]    
>>>Athletes[0].name
sara
>>>Athletes[1].name
jam

好吧,要找到最快的运动员,可以使用max和{}函数。在

^{pr2}$

注意,{cd1}不应该包含在cd1}上。如果你想找到最快的Athlete,你可能需要类似AthleteContainer类的东西。在

网友
2楼 · 发布于 2024-04-16 06:57:04

如果您希望fastest_athlete成为运动员课程的一部分,那么您的Athlete课程应该能够覆盖所有运动员。在

fastest_athlete将返回一个列表,因为可能有更多的运动员在最佳时间跑步。在

athletes=[] # stores all athletes 

class Athlete:
    def __init__(self,names,ftime):
        self.name=names
        self.fastest=ftime
        athletes.append(self)
    def fastest_athlete(self):
        besttime= min([athlete.fastest for athlete in athletes])
        return [athlete.name for athlete in athletes if athlete.fastest==besttime]



names=(['sara','jam','mary'])
times=([90,50,75])

for a, t in zip(names, times):
    last_athlete=Athlete(a, t)

print last_athlete.fastest_athlete()
网友
3楼 · 发布于 2024-04-16 06:57:04

由于速度最快的运动员并不依赖于具体的实例,因此它更适合作为静态方法:

class Athlete:
    # ...
    @staticmethod
    def fastest_athlete(athletes):
        return reduce(lambda x, y: x if x.fastest < y.fastest else y, athletes)

# ...
athletes = [Athlete(name, time) for name, time in zip(names, times)] 
fastest = Athlete.fastest_athlete(athletes)

相关问题 更多 >