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
相关产品推荐
相关产品推荐

