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

Pygame继承Block类触发__init__参数不匹配TypeError问题求助

错误产生原因
  • 直接触发报错的原因是Player类初始化方法的参数数量不匹配:你定义Player.__init__时仅设置了x、y两个入参(不算隐式传递的self),但实例化Player对象时你传入了RED, 20, 20三个参数,加上自动传递的self,总计向__init__方法传入了4个参数,和定义的参数数量不符,因此抛出该TypeError。
  • 其次是子类调用父类初始化的逻辑存在错误:Player继承自Block类,父类Block.__init__要求必须传入color、width、height三个参数,但你在Player.__init__中调用super().__init__()时没有传递任何参数,哪怕修复了实例化参数问题,这里也会继续抛出参数不匹配错误。
  • 另外还存在两处隐藏逻辑错误:一是循环创建Block实例时,Block(200, 20,20)的第一个参数传入了数值200,不符合父类要求的颜色元组格式,后续会触发填充颜色的错误;二是键盘控制逻辑尚未补全,也没有调用update方法更新玩家位置,无法实现预期的移动效果。
修复方案

你可以按以下步骤修改代码:

  1. 调整Player类的初始化逻辑,调用父类构造方法时传入正确的参数,同时可以复用父类的代码减少冗余:
class Player(Block):
    def __init__(self, x, y):
        # 给父类传入玩家固定的颜色、宽度、高度参数
        super().__init__(RED, 15, 15)
        self.rect = self.image.get_rect()
        self.rect.x = x
        self.rect.y = y
        self.change_x = 0
        self.change_y = 0

    # 剩余的changespeed、update方法保持不变即可
  1. 修改Player实例化的代码,传入正确的初始坐标参数:
# 传入初始的x、y坐标,比如放在画面左上角
player = Player(50, 50)
  1. 修复Block实例化的参数错误,传入合法的颜色值:
block = Block(RED, 20,20)
  1. 补全键盘控制逻辑,删除原有的鼠标控制相关代码:
  • 事件循环中补全按键按下、松开的判断逻辑:
elif event.type == pygame.KEYDOWN:
    if event.key == pygame.K_LEFT:
        player.changespeed(-3, 0)
    if event.key == pygame.K_RIGHT:
        player.changespeed(3, 0)
    if event.key == pygame.K_UP:
        player.changespeed(0, -3)
    if event.key == pygame.K_DOWN:
        player.changespeed(0, 3)
elif event.type == pygame.KEYUP:
    if event.key == pygame.K_LEFT:
        player.changespeed(3, 0)
    if event.key == pygame.K_RIGHT:
        player.changespeed(-3, 0)
    if event.key == pygame.K_UP:
        player.changespeed(0, 3)
    if event.key == pygame.K_DOWN:
        player.changespeed(0, -3)
  • 在画面填充白色之后、碰撞检测之前,添加精灵更新的调用,同时删除无用的鼠标位置获取、无效坐标赋值代码:
screen.fill(WHITE)
# 删掉下面这三行没用的代码
# pos = pygame.mouse.get_pos()
# player.rect.x = player.rect.x
# player.rect.y = player.rect.y
# 新增调用update方法更新所有精灵位置
all_sprites_list.update()

修改完成后运行代码就不会再出现参数错误,也可以通过方向键控制玩家方块移动收集其他方块。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 13:15:04