自定义Object类继承Turtle类调用shapesize报AttributeError求助
解决'Object' object has no attribute '_outlinewidth'错误
嘿,我一眼就发现问题所在了——你在Object类的__init__方法里犯了个典型的继承错误:手动给self赋值了一个全新的Turtle()实例,这直接跳过了父类的初始化流程,导致子类实例缺少了父类Turtle本该创建的内部属性(比如_outlinewidth)。
修正后的Object类代码
假设你的类定义在game_objects.py文件中:
import turtle from turtle import Turtle class Object(Turtle): def __init__(self, shape, color, x, y): # 先调用父类的构造函数,完成父类属性的初始化 super().__init__() self.speed(0) self.shape(shape) self.color(color) self.penup() self.goto(x, y)
为什么这样能解决问题?
super().__init__()是Python中继承场景下初始化父类的标准方式,它会触发父类Turtle的构造函数,帮你完成所有必要的内部属性(包括_outlinewidth这类你看不到的属性)的初始化。- 你之前写的
self = Turtle()相当于重新创建了一个独立的Turtle对象,但这个对象和当前子类的实例没有任何关联,Python自动创建的子类实例根本没经过父类的初始化流程,调用shapesize这类继承来的方法时,自然找不到需要的属性。
验证使用
在另一个文件中导入并使用Object类:
from game_objects import Object pad1 = Object("square", "blue", -350, 0) pad1.shapesize(stretch_len=1, stretch_wid=5) # 现在可以正常运行啦!
内容的提问来源于stack exchange,提问作者Ashraf Ibrahim
相关产品推荐
相关产品推荐

