自定义turtle.Screen子类报__init__位置参数数量错误排查
自定义turtle Screen类参数报错排查
核心错误原因
你的代码存在3处语法/逻辑错误,直接触发_Screen.__init__()仅接收1个位置参数,但实际传入了4个的报错:
- 类继承写法错误:类定义行写的是
class Screen(turtle.Screen()):,括号中传入的是turtle.Screen()创建好的实例对象,而非Screen类本身。Python继承要求传入待继承的类,传入实例会导致继承关系完全异常。 - 父类构造方法调用错误:代码中
turtle.Screen().__init__(self)的写法存在两层问题:一是turtle.Screen()本身就会独立创建一个新的Screen实例,和你当前要初始化的自定义类实例无关;二是turtle的_Screen构造方法仅接收实例自身作为隐式参数,你手动传入self相当于额外多传了参数,刚好匹配你看到的报错提示。 - 属性命名冲突:
title、bgcolor、tracer都是turtle.Screen自带的实例方法,你直接将这些方法名作为实例属性赋值为字符串、数值,会覆盖原有方法,后续调用相关功能时会触发二次错误。
修正后可运行代码
import turtle # 继承时传入turtle.Screen类本身,不要加括号创建实例 class Screen(turtle.Screen): def __init__(self, title, bgcolor, height, width, tracer=0): # 调用父类构造方法,无需手动传入self super().__init__() # 调用父类自带方法完成配置,不要覆盖同名方法 self.title(title) self.bgcolor(bgcolor) self.setup(width=width, height=height) self.tracer(tracer) # 调用测试 if __name__ == "__main__": my_screen = Screen("My Game", "black", 600, 800) turtle.done()
关键修正点说明
- 类定义行将
turtle.Screen()改为turtle.Screen,明确继承Screen类而非其实例 - 删除错误的
turtle.Screen().__init__(self)写法,改用super().__init__()完成父类初始化,不会传入多余参数 - 窗口标题、背景色、追踪帧率全部通过父类自带的对应方法传入配置,不覆盖原有方法;窗口尺寸通过
setup()方法完成设置,如果需要在实例中保存尺寸参数,可改用不冲突的属性名(如self.win_height、self.win_width)避免覆盖内置属性/方法。
内容的提问来源于stack exchange,提问作者Tk 101
相关产品推荐
相关产品推荐

