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

