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

Python类AttributeError求助:Snake对象无snak属性

解决Snake类的AttributeError问题

核心错误原因

你把类的构造函数**init拼写成了int**,Python无法识别这个错误命名的方法,因此不会执行初始化逻辑,self.snak属性根本没有被创建,调用move()方法时自然会抛出属性不存在的错误。

次要错误修复

除了构造函数的拼写问题,create_snake方法里的循环逻辑也有问题:

for _ in XCOR:
    sna.goto(XCOR[_],0)

这里的_是列表XCOR中的元素(如0、-20、-40),不是索引。当_取值为-20时,XCOR[-20]会触发索引越界错误。正确的写法应该是遍历索引:

for idx in range(len(XCOR)):
    sna.goto(XCOR[idx], 0)

或者用enumerate同时获取索引和值:

for idx, x in enumerate(XCOR):
    sna.goto(x, 0)

修复后的完整代码

from turtle import Turtle
XCOR = [0, -20, -40]
MOVE_DISTANCE = 20

class Snake:
    def __init__(self):  # 修正构造函数名称
        self.snak = []
        self.create_snake()

    def create_snake(self):
        # 修正循环逻辑,遍历索引而非元素
        for idx in range(len(XCOR)):
            sna = Turtle("square")
            sna.color("white")
            sna.penup()
            sna.goto(XCOR[idx], 0)
            self.snak.append(sna)

    def move(self):
        for them in range(len(self.snak)-1, 0, -1):
            newx = self.snak[them-1].xcor()
            newy = self.snak[them-1].ycor()
            self.snak[them].goto(newx, newy)
        self.snak[0].forward(MOVE_DISTANCE)

# 测试代码(加入屏幕更新逻辑以可视化移动)
from turtle import Screen
import time

screen = Screen()
screen.setup(width=600, height=600)
screen.bgcolor("black")
screen.tracer(0)
screen.title("My snake game")

snake = Snake()
game = True
while game:
    screen.update()
    time.sleep(0.6)
    snake.move()

screen.exitonclick()

说明

修复后的代码加入了屏幕更新逻辑(和你无类版本的逻辑一致),否则蛇的移动不会被可视化出来。现在运行代码,蛇会正常移动,不会再出现属性错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 11:37:04