【问题标题】:How can I get a self variable from another class?我如何从其他类中获取自变量?
【发布时间】:2023-01-18 23:47:28
【问题描述】:

我的问题是我需要从cogs/invite_moduly.py 文件中的gift_bot.py 文件获取self.tracker 变量。但遗憾的是,我不知道如何做到这一点。我尝试了一些方法,比如self.bot.trackertracker等等,但都没有用。

如何在invite_module.py 中访问这个变量?

gift_bot.py:

class GiftBot(commands.Bot):

    def __init__(self):
        self.tracker = InviteTracker(self)
        super().__init__(command_prefix="*", intents=intents, case_insensitive=True)

    async def on_ready(self):

        try:
            await self.tracker.cache_invites()
        except:
            pass

齿轮/invite_module.py:

class InviteModule(commands.Cog):

    def __init__(self, bot: commands.Bot):
        self.bot = bot


        self.last_member: list = []

    @commands.Cog.listener("on_member_join")
    async def on_member_join(self, member: discord.Member):
        invite_info = await get_inviter(self.tracker, member)

使用此代码,我得到 Unresolved attribute reference 'tracker' for class 'InviteModule'

【问题讨论】:

  • self 只是一个名字。它绑定到 GitBot 方法中的 GiftBot 实例;你需要一些其他方法来在InviteModule.on_member_join 中获取GiftBot 的实例。 (或通过其他方式获取 InviteTracker 的实例以传递给 get_inviter。)
  • 是的,我知道,但我不知道如何获得实例。

标签: python discord.py


【解决方案1】:

假设您将 InviteModule 实例化为 bot 作为对 GiftBot 实例的引用,它将是 self.bot.tracker

self 用于引用该方法所在的类的实例(按照惯例,它是不是一个关键字,但不鼓励使用self以外的东西。所以,在InviteModule里面,self是类InviteModule的对象,在GiftBot里面,它是类GiftBot的对象。

如果你想在InviteModule 中引用GiftBot 的属性,你必须将GiftBot 的实例传递给InviteModule¹,我假设你正在做的是bot 属性。所以,要访问它里面InviteModule 使用self.bot,因此,跟踪器将是self.bot.tracker


¹ 或者,您可以传递属性本身,而不是传递整个机器人。例如,你可以这样做:

class InviteModule(commands.Cog):

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

        # rest of the code here

并用作:

giftBot = GiftBot()
insideModule = InsideModule(giftBot.tracker)

我假设您想要第一个选项,但我添加这个是为了完整性。

【讨论】:

    猜你喜欢
    • 2013-04-06
    • 2021-06-21
    • 2016-12-05
    • 1970-01-01
    • 1970-01-01
    • 2018-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多