为何类实例列表与Pygame/Python全局列表表现不同?
问题原因分析与解决办法
核心问题
你使用platformObjects = [Platform()] * Platform.countOfPlatforms创建列表时,并没有生成10个独立的Platform实例——这个写法只是把同一个Platform对象的引用重复了10次存入列表。列表里的所有元素指向的都是内存中同一个对象。
现象解释
循环调用setPos时,你每次修改的都是同一个对象的位置属性,每次修改都会覆盖之前的值。循环中打印时,是修改完当前(实则为同一个对象)的位置就输出,所以看起来是随机值;但循环结束后,该对象的位置被最后一次setPos的结果覆盖,主循环遍历列表时,所有元素都是这个对象,自然显示的位置完全相同。
全局列表正常的原因
你改用全局列表platforms时,应该是通过正确方式生成了多个独立实例(比如列表推导式),每个元素都是全新的Platform对象,各自的位置属性独立,不会互相覆盖,因此显示正常。
正确的实例创建方式
替换成列表推导式,确保每次循环都生成新实例:
platformObjects = [Platform() for _ in range(Platform.countOfPlatforms)]
内容的提问来源于stack exchange,提问作者Bondrusiek
相关产品推荐
相关产品推荐

