当我做我的discord.py项目时,我发现以下代码第一次工作得很好,但第二次(在一次运行中)返回属性错误。
class Test2(commands.Cog):
def __init__(self, dc_bot):
self.bot = dc_bot
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.__init__(self) # reset the values
第一次运行良好。
第二次它会说:AttributeError: 'Test2'没有属性'user'
我想是因为我想重置self。下一次运行的UI。
如果有很多"self"在我需要使用的init函数中,我认为(之前)只调用init函数是个好主意。但是我认为再次运行self.ui = dc_bot
会导致这个问题。你能解释一下为什么会这样吗?
重新调用init方法时出现错误。self.__init__(self)
实际上调用了Test2. __init__(self, self)
。这将覆盖self.bot = self
,从而在第二次运行该命令时出现属性错误。相反,你需要:
self.__init__(self.bot)
但这不是一个好的解决方案,相反,你应该使用"reset"Helper方法进行重置,你调用Helper方法而不是init。因为通常情况下,一旦类被初始化,你就不想再调用init方法了。
你把代码弄得太复杂了试试这个!
@commands.command(description = "get avatar")
async def getavatar(self, ctx, *, avamember: discord.Member = None):
userAvatarUrl = avamember.avatar_url
await ctx.send(userAvatarUrl)