Python列表元素均同问题:游戏时间字段全部更新为最终值
问题分析与解决方案
嘿,我一眼就发现你代码里的问题啦!
问题根源
你在Field类的__init__方法里用了这行代码创建游戏列表:
self.games = [Game()] * numTimes
这里的坑在于:用[对象] * 数量的方式创建列表时,列表里的每一项其实都是同一个对象的引用,不是各自独立的新对象。也就是说,你这4个“Vic Park”对应的Game,本质上是同一个实例!所以不管你给哪个游戏设置time,都是在修改同一个对象的属性,最后所有游戏自然都会显示最后一次设置的那个时间值。
修复方法
把创建游戏列表的代码改成列表推导式,这样每次循环都会创建一个全新的Game实例:
self.games = [Game() for _ in range(numTimes)]
修改后的完整代码
class Game: time = 0 team1 = "" team2 = "" class Field: def __init__(self, numTimes = 0, name = "", daysAvail = 0): self.numTimes = numTimes # 用列表推导式生成独立的Game实例 self.games = [Game() for _ in range(numTimes)] self.name = name self.daysAvail = daysAvail fieldList = [] fieldList.append(Field(4,"Vic Park", 5)) # 5 = 周一和周三,二进制0000101,最低位是周一
这样修改后,每个游戏都是独立的Game对象,你给它们设置不同的time值,就会各自显示对应的时间啦!
内容的提问来源于stack exchange,提问作者Stuckatmarine
相关产品推荐
相关产品推荐

