@estry

Как передать объект в другой файл Python?

Привет!
Есть проект на Python.
Файл start.py из которого происходит старт всего проекта. Вот его содержимое:
from aiogram import Bot, Dispatcher

from tgbot.handlers.hello import hello_user

def create_pool(user, password, database, host, echo):
    raise NotImplementedError  # TODO check your db connector


async def main():
 
    bot = Bot(token=config.tg_bot.token)
    dp = Dispatcher(bot, storage=storage)

    hello_user(dp)

   
if __name__ == '__main__':
    try:
        asyncio.get_event_loop().run_until_complete(main())
        #asyncio.run(main())
    except (KeyboardInterrupt, SystemExit):
        logger.error("Bot stopped!")


Есть файл hello.py в папке handlers. Его содержимое:
from aiogram import Dispatcher
from aiogram import types


async def user_hello(m: types.Message):
    await m.answer('Привет, ' + m.from_user.username + ', выбери с чего хочешь начать:')


def hello_user(dp: Dispatcher):
    dp.register_message_handler(user_hello, commands=['start'])


Мне необходимо передать из файла start.py объект bot в файл hello.py. Пробовал через импорт, from bot import bot - не получается.
Как можно реализовать передачу объекта bot?
  • Вопрос задан
  • 82 просмотра
Решения вопроса 1
Bad-Coder
@Bad-Coder
Костыль мира.
Нельзя импортировать переменную из функции. Используйте global, или class.

Пример с global:
bot = Bot(token=config.tg_bot.token)

async def main():
    global bot

    # Ваш код.


Пример с class:
class YourBotName:
    def __init__(self):
        self.bot = Bot(token=config.tg_bot.token)
        self.dp = Dispatcher(bot, storage=storage)

    async def main(self):
        hello_user(self.dp)

botname = YourBotName()

if __name__ == '__main__':
    try:
        asyncio.get_event_loop().run_until_complete(botname.main())
        #asyncio.run(botname.main())
    except (KeyboardInterrupt, SystemExit):
        logger.error("Bot stopped!")


Рекомендую все-же использовать class.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@MEDIOFF
Python Developer
Вынесите объявление бота в отдельный файл типо bot.py, и потом импортироуйте его и в main.py и в hello.py
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы