如何为Python列表添加属性?JS开发者遇AttributeError求助
解决方案:给turtle列表添加统一speed属性的方法
你遇到的问题本质是JavaScript和Python对“数组/列表”的设计差异:JS里数组属于对象,能随便加自定义属性;但Python的内置list是轻量容器,默认不支持动态添加自定义属性,所以直接给turtles这个list加speed会报错。
下面给你几种实用的解决办法:
方法1:直接给每个turtle实例设置speed
这是最直接的方式,因为列表里的每个元素本身就是Turtle对象,自带speed()方法:
turtles = [Turtle()] # 单个元素设置 turtles[0].speed(10) # 多元素时遍历统一设置 for turtle in turtles: turtle.speed(10)
之后要修改速度,再遍历一次列表即可。
方法2:自定义带speed属性的列表类
如果想要类似JS那种“给整个列表加属性,自动同步到所有元素”的效果,可以自己写个继承自list的类:
from turtle import Turtle class TurtleList(list): def __init__(self, *turtles): super().__init__(turtles) self._speed = 0 @property def speed(self): return self._speed @speed.setter def speed(self, value): self._speed = value # 自动同步给列表里的所有turtle for turtle in self: turtle.speed(value) # 使用示例 turtles = TurtleList(Turtle(), Turtle()) turtles.speed = 10 # 这行代码会把所有turtle的速度统一设为10
这样操作turtles.speed的方式就和JS里的用法几乎一致了。
方法3:用字典包装列表和speed属性
如果不想写自定义类,也可以用字典把列表和speed绑定在一起:
turtle_group = { 'turtles': [Turtle(), Turtle()], 'speed': 10 } # 手动同步速度到每个turtle for t in turtle_group['turtles']: t.speed(turtle_group['speed'])
这种方式灵活易上手,但需要手动执行同步步骤。
内容的提问来源于stack exchange,提问作者KozynTheTaquito
相关产品推荐
相关产品推荐

