Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从cog类检索变量_Python_Python 3.x_Discord_Discord.py - Fatal编程技术网

Python 从cog类检索变量

Python 从cog类检索变量,python,python-3.x,discord,discord.py,Python,Python 3.x,Discord,Discord.py,这是我代码的一部分。如何在类外使用self.players?在使用类对象之前,可以定义一个变量来存储它,如下所示: class Music(commands.Cog): def __init__(self, client): self.players = {} async def destroy_player(self,ctx): try: self.players.pop(ctx.guild.id)

这是我代码的一部分。如何在类外使用self.players?

在使用类对象之前,可以定义一个变量来存储它,如下所示:

class Music(commands.Cog):
    def __init__(self, client):
        self.players = {}

    async def destroy_player(self,ctx):
        try:
            self.players.pop(ctx.guild.id)
            print(self.players)
        except:
            pass


def setup(client):
    client.add_cog(Music(client))
def setup(client):
    c = Music(client)
    client.add_cog(c)
    print(c.players)

您可以创建类的实例(在函数外部创建实例以在函数外部使用它,或者在带有return语句的函数中使用它),这是一种更简单的方法

或者,如果要避免创建类的实例,请执行以下操作:

class Music(commands.Cog):
    def __init__(self, client):
        self.players = {}

    async def destroy_player(self,ctx):
        try:
            self.players.pop(ctx.guild.id)
            print(self.players)
        except:
            pass


def setup(client):
    client.add_cog(Music(client))
def setup(client):
    c = Music(client)
    client.add_cog(c)
    print(c.players)
这也将在不创建类实例的情况下返回属性,但该属性可以位于init语句中


如果您想了解更多有关Python中getter和setter的信息,请使用
get\u cog
方法。假设你在另一个齿轮中使用这个


异步def get_something(self,ctx):#这将是一个cog方法(cog类中的命令或任何函数)
Music=self.bot.get\u cog('Music'))
打印(音乐、播放器)
或者如果您只是在使用
bot

async def get_something(ctx):
Music=bot.get_cog('Music')或ctx.bot.get_cog('Music'))
如果您已将cog
Music
add_cog(Music(bot)

参考资料:
示例:
您可以看到discord.py的docs示例

以及如何在函数之外使用“c”?因为“c.players”是一个类,我想销毁它。为此,我需要“c”,否则我需要一种方法来杀死该类。@AlpacaTheUnicorn您可以在函数末尾添加
并在调用functin时返回c
,而不仅仅是ode>setup(),您可以执行
c=setup()
。如果我没有错的话,安装程序由
load\u extension
调用。我认为OP不会手动调用它。@Ceres噢。谢谢你通知我。这只会返回一个新对象,cog的数据不会被使用,只会一直打印空的播放器谢谢!这对我有帮助,但我不知道为什么,但不得不使用ctx而不是self:Music=ctx.bot.get_cog('Music')但它仍然很有用!是的,self仅在您处于cog中时才起作用。我将编辑我的答案,使其在主目录中起作用