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

Python代码报错TypeError: sound()缺少必选参数objectS求助

问题分析与解决

你遇到的TypeError是典型的实例方法与类方法调用混淆导致的,具体原因和修复方案如下:

错误根源

_Warning类中的sound()是一个实例方法,它的第一个参数self必须接收该类的一个实例对象。但你在代码里直接用类名_Warning调用它:

_Warning.sound(1)

这时候Python会把你传入的1当作self参数,而原本需要的objectS参数就缺失了,所以抛出了"missing 1 required positional argument: 'objectS'"的错误。

修复步骤

  1. 保存Warning实例的引用
    在warnings()方法中创建_Warning实例时,把它赋值给一个变量,这样后续才能用这个实例调用方法:

    # 替换原来的 _Warning(self, 1)
    self.current_warning = _Warning(self, 1)
    
  2. 用实例调用sound方法
    把原来的_Warning.sound(1)改成用保存的实例调用:

    self.current_warning.sound(1)
    

    同理,后续处理第二个警告时,也要先保存新的实例再调用方法:

    # 替换原来的 _Warning(2)
    self.current_warning = _Warning(self, 2)
    # 调用sound
    self.current_warning.sound(2)
    
  3. 额外优化建议

    • 你的_Warning类在__init__里每次都会重复加载图片和声音文件,这会浪费资源,建议把这些资源放到类级别变量中,只加载一次:
      class _Warning(pg.sprite.Sprite):
          # 类变量,仅初始化一次
          warningImage_1 = pg.image.load("wra.png")
          warningImage_2 = pg.image.load("wrb.png")
          warningSound_1 = py.media.load("wra.mp3")
          warningSound_2 = py.media.load("wra.mp3")
      
          def __init__(self, game, objectI):
              self.groups = game.warningGroups
              pg.sprite.Sprite.__init__(self, self.groups)
              self.game = game
              self.player = py.media.Player()
              if objectI == 1:
                  self.image = self.warningImage_1
              elif objectI == 2:
                  self.image = self.warningImage_2
              self.image = pg.transform.scale(self.image, (self.game.wMainDisplay, self.game.hMainDiplay))
              self.rect = self.image.get_rect()
              self.rect.x = 0
              self.rect.y = 0
      
    • 注意py.app.run()会启动pyglet的独立事件循环,可能会阻塞你的Pygame主循环,建议改用pyglet.media.Player的play()配合Pygame的循环逻辑,避免两个事件循环冲突。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:13:55