You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解决贪吃蛇游戏开发中的AttributeError: 'Snake' object has no attribute 'segments'错误?

解决贪吃蛇游戏中的AttributeError: 'Snake' object has no attribute 'segments'问题

我来帮你排查这个问题,其实错误的根源很明确,咱们一步步来修复:

错误原因分析

你遇到的AttributeError是因为在Snake类的__init__方法里,你把segments定义成了局部变量(直接写segments = []),而不是类的实例属性(应该用self.segments = [])。这就导致后续create_snake和move方法尝试访问self.segments时,这个属性根本不存在,自然就抛出了错误。

除此之外,代码里还有两个小问题需要一并修复:

  1. __init__方法里初始化时就调用了self.move(),这会导致蛇在游戏循环启动前就提前移动一次,和后续的循环调用重复,可能造成移动逻辑混乱。
  2. 常量STARTING_POSITIOBS拼写错误,应该是STARTING_POSITIONS,虽然当前没触发错误,但后续扩展功能时可能出问题。

修复后的snake.py代码

import time
STARTING_POSITIONS = [(0, 0), (-20, 0), (-40, 0)]  # 修正拼写错误
MOVE_DISTANCE = 20

class Snake:
    def __init__(self):
        self.segments = []  # 定义为实例属性,而非局部变量
        self.create_snake()
        # 移除这里的self.move()调用,交给main.py的游戏循环处理
    
    def create_snake(self):
        for position in STARTING_POSITIONS:
            new_segment = Turtle("square")
            new_segment.color('white')
            new_segment.penup()
            new_segment.goto(position)
            self.segments.append(new_segment)
    
    def move(self):
        for seg_num in range(len(self.segments) - 1, 0, -1):
            new_x = self.segments[seg_num - 1].xcor()
            new_y = self.segments[seg_num - 1].ycor()
            self.segments[seg_num].goto(new_x, new_y)
        self.segments[0].forward(MOVE_DISTANCE)

修复点说明

  • 将segments改为实例属性:把__init__里的segments = []改成self.segments = [],这样整个类的方法都能通过self.segments访问这个列表,解决了属性不存在的错误。
  • 移除初始化时的move调用:让main.py的游戏循环单独负责调用snake.move(),保证移动逻辑的一致性。
  • 修正常量拼写:把STARTING_POSITIOBS改为STARTING_POSITIONS,避免后续可能的拼写错误问题。

现在运行你的main.py代码,应该就能正常启动贪吃蛇游戏了!

内容的提问来源于stack exchange,提问作者Jessica Lai

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.27 19:57:39