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

Python Turtle自定义Brick类调用goto时出现AttributeError问题求助

解决Python Turtle Brick类的AttributeError问题

问题本质

你碰到的AttributeError: 'Brick' object has no attribute '_drawing',核心原因是没有正确初始化父类turtle.Turtle的内部属性。Turtle的内置方法(比如goto)依赖这些底层属性才能运行,跳过父类初始化步骤就会导致方法调用失败。

而调用super().__init__()后砖块出现在屏幕中间,是因为父类turtle.Turtle的默认初始位置就是(0,0);无法移动大概率是因为你没在初始化时正确配置砖块的可移动状态,或者之前的错误导致方法逻辑异常。

正确的Brick类实现

直接看可运行的代码示例:

import turtle as tt

class Brick(tt.Turtle):
    def __init__(self, x_pos, y_pos, brick_color="orange"):
        # 第一步:必须先调用父类初始化,创建turtle所需的全部内部属性
        super().__init__()
        
        # 第二步:设置砖块的外观属性
        self.shape("square")
        self.color(brick_color)
        # 拉伸形状,让它变成扁长的砖块(宽1倍,长3倍)
        self.shapesize(stretch_wid=1, stretch_len=3)
        self.penup()  # 抬笔,移动时不会留下轨迹
        
        # 第三步:设置初始位置
        self.goto(x_pos, y_pos)

# 主脚本测试
screen = tt.Screen()
# 创建一个初始位置在(-180, 200)的砖块
test_brick = Brick(-180, 200)
# 调用goto移动,现在不会报错
test_brick.goto(180, 200)

screen.mainloop()

关键注意点

  • 父类初始化必须优先执行:super().__init__()要放在__init__方法的最开头,确保turtle的内部属性(包括_drawing)被正确创建。
  • 初始位置手动设置:父类默认位置是(0,0),所以你需要在初始化时传入坐标并调用goto或setpos,把砖块放到指定位置。
  • 重写内置方法要保留父类逻辑:如果你在Brick类里重写了goto、move这类方法,必须调用super().goto(x,y)来继承父类的移动逻辑,否则自定义方法会覆盖掉turtle的原生功能。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 22:21:38