Python自定义Turtle类报错:AttributeError: 'Trt' object has no attribute 'penup'
解决Trt类的AttributeError问题
嘿,这个问题刚接触类封装时很容易踩坑,我来帮你理顺!
你遇到的AttributeError: 'Trt' object has no attribute 'penup',核心原因很明确:你在Trt类的__init__里直接调用了self.penup(),但你的Trt类本身并没有penup方法——penup是turtle.Turtle实例的专属方法,你已经在类里创建了这个实例并赋值给self.object,所有海龟相关的操作都得通过self.object来调用才行。
另外,你之前直接给self.color、self.shape赋值的方式也不对,这些是海龟对象的属性,应该调用海龟对象的对应方法来设置。
修正后的完整代码
import turtle import random # 用于实现随机移动逻辑 class Trt(): def __init__(self, color, posit, shape): # 创建海龟实例并保存为类的属性 self.object = turtle.Turtle() # 所有海龟操作都通过self.object调用对应方法 self.object.penup() self.object.color(color) self.object.shape(shape) self.object.setpos(posit) self.object.pendown() # 额外封装一个随机移动方法,让调用更简洁 def move_random(self): self.object.forward(random.randint(1, 5)) # 创建你的海龟实例 t1 = Trt("Yellow", (-400, 200), "turtle") t2 = Trt("Red", (-400, 100), "turtle") # 测试随机移动逻辑 for _ in range(50): t1.move_random() t2.move_random() turtle.done()
关键修正点
- 把
self.penup()改为self.object.penup(),同理pendown、color、shape、setpos都要通过self.object调用 - 移除无效的
self.color = color这类赋值,改用海龟对象的方法来设置属性 - 新增
move_random方法,把随机移动逻辑也封装到类里,后续调用会更方便
这样修改后,你的Trt类就能正确封装海龟对象,运行时就不会再报错啦!
内容的提问来源于stack exchange,提问作者Rafał Gruba
相关产品推荐
相关产品推荐

