Импорт функции из другого Cog с помощью discord.py - PullRequest
0 голосов
/ 27 января 2020

Я хотел бы импортировать некоторые функции из другого Cog, чтобы их можно было использовать для нескольких Cog в разных файлах .py. Как бы я go сделал это? Вот что говорит документация:

class Economy(commands.Cog):
    ...

    async def withdraw_money(self, member, money):
        # implementation here
        ...

    async def deposit_money(self, member, money):
        # implementation here
        ...

class Gambling(commands.Cog):
    def __init__(self, bot):
        self.bot = bot

    def coinflip(self):
        return random.randint(0, 1)

    @commands.command()
    async def gamble(self, ctx, money: int):
        """Gambles some money."""
        economy = self.bot.get_cog('Economy')
        if economy is not None:
            await economy.withdraw_money(ctx.author, money)
            if self.coinflip() == 1:
                await economy.deposit_money(ctx.author, money * 1.5)

в качестве примера, но это означает, что мне нужно каждый раз определять economy, если я хочу обратиться к нему. Есть ли более эффективный метод для вызова функции в другом Cog?

1 Ответ

1 голос
/ 27 января 2020

Если withdraw_money и deposit_money не используют какие-либо атрибуты или методы Economy, вы можете установить их как методы c и импортировать Economy, чтобы использовать их или просто сделать их функциями вне class / cog и импортируйте их напрямую.

В противном случае, вы можете найти способ реорганизовать эти методы, чтобы они не полагались на Economy, чтобы вы могли сделать их методами c или независимыми функции.

Если это невозможно, это уже лучший способ сделать это.
Bot.get_cog в любом случае равно O (1), так что эффективность воздействия очень минимальна.

...