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

Discord.py Cogs中扩展View类无法传递变量的问题

Discord.py 自定义View传参后send失效问题解决

问题情况

原本Embed和View可以正常发送,但通过view = StartMatch(player_1, player_2)传递变量后,await ctx.send(view=view, embed=embed)失效——变量能正常打印,但无任何报错,消息也无法发送。

问题代码

embed.add_field(name="Player 1", value=new_game['player_1']['name'], inline=True)
embed.add_field(name="Player 2", value=new_game['player_2']['name'], inline=True)
await ctx.send(view=view, embed=embed)

class StartMatch(View):
    def __init__(self, player_1, player_2):
        self.player_1 = player_1
        self.player_2 = player_2
        print(f'This is player 1 {self.player_1}, player 2 {self.player_2}')

问题原因

自定义View类继承自discord.py的View时,重写__init__方法却未调用父类的构造函数super().__init__(),导致View内部核心初始化逻辑(如组件管理、超时配置等)未执行。虽然实例化时变量能正常打印,但该View实例不符合Discord.py的运行要求,无法被send方法正确处理,最终表现为消息发送失效。

修复代码

class StartMatch(View):
    def __init__(self, player_1, player_2):
        super().__init__()  # 必须调用父类构造函数完成初始化
        self.player_1 = player_1
        self.player_2 = player_2
        print(f'This is player 1 {self.player_1}, player 2 {self.player_2}')

说明

在Python继承体系中,子类重写__init__方法时,必须显式调用父类的__init__来完成父类部分的初始化工作。Discord.py的View类依赖自身初始化逻辑维护组件状态,缺失这一步会导致View功能完全失效,即使没有抛出异常,也无法正常工作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 12:10:17