首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >discord.py -异步def coroutine不运行在齿轮中

discord.py -异步def coroutine不运行在齿轮中
EN

Stack Overflow用户
提问于 2020-06-07 11:29:39
回答 1查看 547关注 0票数 1

我想使用cogs对命令进行分类,而不必重新启动整个机器人来更新某些命令。

所以我添加了齿轮,添加了我的第一个命令,一切都正常了:命令运行,我可以更新和重新加载它,而不需要重新启动我的机器人,但是我注意到异步def协同器无论如何都没有运行。

我尝试使用asyncio.run()而不是等待,但这并没有帮助。我将coroutine和命令添加回主文件,一切都正常。我没有收到任何错误信息,它只是拒绝运行。我想知道我做错了什么,因为我对齿轮很陌生。

Cogs档案:

代码语言:javascript
运行
复制
class MembersCog(commands.Cog):
    def __init__(self, client):
        self.client = client


    async def printfunc(self):
        print("coroutine just ran") #This never runs.

    @commands.command()
    async def test(self, ctx):
        print("command just ran")
        await printfunc()

def setup(client):
    client.add_cog(MembersCog(client))
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-06-07 11:32:50

在类中定义方法时,您将希望通过self关键字访问它,这样程序就知道它引用的是它自己的类中的方法。

代码语言:javascript
运行
复制
class MembersCog(commands.Cog):

    def __init__(self, client):
        self.client = client


    async def printfunc(self):
        print("coroutine just ran")

    @commands.command()
    async def test(self, ctx):
        print("command just ran")
        await self.printfunc()

def setup(client):
    client.add_cog(MembersCog(client))

(有点过分/不必要的方法,但它解释了概念)在类中调用方法的示例:

代码语言:javascript
运行
复制
class Car:

    def __init__(self, mileage):
        self.mileage = mileage

    def add_miles(self, x):
        self.mileage += x

    def drive(self, x):
        self.add_miles(x)

然后使用这个类:

代码语言:javascript
运行
复制
>>> c = Car(50)
>>> c.mileage
50
>>> c.drive(20)
>>> c.mileage
70

如果要将self.add_miles(x)更改为add_miles(x)并运行c.drive()方法,它将产生一个NameError异常,因为它不知道add_miles()是什么。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62244620

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档