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

discord.py二次调用指令报Test2无user属性AttributeError原因求解

错误原因解析

你遇到的报错核心原因就是手动调用__init__方法时的传参逻辑错误:

  • 类的实例方法(包括构造方法__init__)通过实例调用时,第一个self参数是Python自动传入的,不需要手动传递
  • 你的Test2.__init__方法定义了两个参数:第一个是自动传入的实例自身self,第二个是需要手动传入的bot实例dc_bot
  • 你写的self.__init__(self)这行代码,相当于把当前的Test2实例对象当成dc_bot参数赋值给了self.bot,直接覆盖了原本正确的bot实例
  • 第二次调用指令时,self.bot已经变成了Test2实例本身,而Test2类没有定义user属性,访问self.bot.user时就会抛出对应的AttributeError
正确重置属性的方案

如果需要重置多个实例属性,不推荐直接调用__init__,更建议单独封装重置逻辑,避免意外覆盖不需要修改的属性:

class Test2(commands.Cog):
    def __init__(self, dc_bot):
        self.bot = dc_bot
        self.reset_attrs() # 初始化时调用重置方法赋初始值

    # 单独封装所有需要重置的属性逻辑
    def reset_attrs(self):
        self.ui = ""
        # 其他需要初始化的属性都可以放在这里

    @commands.command(description="get avatar")
    async def getavatar(self, ctx, *, content: str):
        avatar = self.bot.user.avatar_url

        self.ui += content
        await ctx.send(content)
        await ctx.send(avatar)

        self.reset_attrs() # 调用重置方法,不会影响self.bot等不需要修改的属性

如果一定要复用__init__的逻辑,调用时传入正确的bot实例即可,即修改为self.__init__(self.bot),但该写法容易出现属性意外覆盖的问题,不推荐使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 12:15:09