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

Python类相关报错无法理解,新手编写的turtle绘图代码运行失败

问题排查&修正方案
  • 参数冗余与属性使用混乱:__init__ 初始化方法已经把坐标x、y、边长lg、颜色col存为实例属性,后续carre、tracer方法不需要重复传这些参数;另外tracer方法定义时接收了lg参数,但实际逻辑里用的是self.lg,传入的参数完全没生效。
  • turtle速度设置错误:t.speed=0是给turtle对象赋值了一个不存在的speed属性,正确设置速度的写法是调用方法 t.speed(0)
  • 缺少实例化&方法调用逻辑:你只定义了Carre类,没有创建类实例、也没有调用绘制方法,代码运行后自然不会有任何绘图输出。
修正后完整代码
import turtle as t

class Carre:
    def __init__(self, x, y, lg, col):
        # 初始化时就把所有实例属性存好,后续方法直接调用
        self.x = x
        self.y = y
        self.lg = lg
        self.col = col

    def tracer(self):
        # 直接用初始化时存的self.lg,不需要额外传参数
        for i in range(4):
            t.forward(self.lg)
            t.right(90)

    def carre(self):
        t.speed(0)  # 修正speed的调用写法
        t.penup()
        t.hideturtle()
        t.goto(self.x, self.y)  # 直接用实例存的坐标属性
        t.pendown()
        t.fillcolor(self.col)  # 直接用实例存的颜色属性
        t.begin_fill()
        self.tracer()
        t.end_fill()
        t.done()  # 加这个防止绘图窗口运行完直接关闭

# 调用示例:创建实例后调用绘制方法
if __name__ == "__main__":
    # 实例化:x=0,y=0,边长100,红色的正方形
    mon_carre = Carre(0, 0, 100, "red")
    # 调用绘制方法
    mon_carre.carre()

如果你需要每次调用carre方法时可以重新指定参数、不局限于初始化的属性,可以调整为以下写法,不需要依赖初始化传入的属性:

import turtle as t

class Carre:
    def tracer(self, lg):
        for i in range(4):
            t.forward(lg) # 直接用传入的lg,不用self
            t.right(90)

    def carre(self, x, y, lg, col):
        t.speed(0)
        t.penup()
        t.hideturtle()
        t.goto(x,y)
        t.pendown()
        t.fillcolor(col)
        t.begin_fill()
        self.tracer(lg)
        t.end_fill()
        t.done()

if __name__ == "__main__":
    mon_carre = Carre()
    mon_carre.carre(-50, 50, 120, "blue")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 11:15:01