Python 从cog类检索变量
这是我代码的一部分。如何在类外使用self.players?在使用类对象之前,可以定义一个变量来存储它,如下所示: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)
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'))
如果您已将cogMusic
与add_cog(Music(bot)
参考资料:
您可以看到discord.py的docs示例以及如何在函数之外使用“c”?因为“c.players”是一个类,我想销毁它。为此,我需要“c”,否则我需要一种方法来杀死该类。@AlpacaTheUnicorn您可以在函数末尾添加
并在调用functin时返回c
,而不仅仅是c=setup()
。如果我没有错的话,安装程序由load\u extension
调用。我认为OP不会手动调用它。@Ceres噢。谢谢你通知我。这只会返回一个新对象,cog的数据不会被使用,只会一直打印空的播放器谢谢!这对我有帮助,但我不知道为什么,但不得不使用ctx而不是self:Music=ctx.bot.get_cog('Music')但它仍然很有用!是的,self仅在您处于cog中时才起作用。我将编辑我的答案,使其在主目录中起作用