RimMirK
@RimMirK
Вроде человек. Вроде учусь. Вроде пайтону

Как разделить код на несколько файлов?

Код бота стал довольно большой и в нем сложно разобраться. надо его разделить на части, как это правильно сделать? Как "включить" отдельную часть? С функциями все понятно, а вот с классами (экземплярами классов) и с декораторами - нет.
  • Вопрос задан
  • 181 просмотр
Решения вопроса 1
Vindicar
@Vindicar
RTFM!
У тебя будет проблема с циклическим импортом: основной файл будет импортировать модули с функциями, но этим модулям будет требоваться экземпляр бота, описанный в основном файле. Эту проблему можно обойти так:
# submodule_1.py  - модуль, содержащий часть функций бота
def setup(bot):  
    # bot - объект бота. Можешь добавить и другие полезные параметры, такие как:
    # - объект logging.Logger для журналирования
    # - объект соединения с БД
    # - ну и что там ещё тебе потребуется

    # все обработчики событий объявляем ВНУТРИ setup()
    # тогда они смогут ссылаться на переданные параметры
    @bot.command('/start')  # например, чтобы использовать декораторы
    def on_start(message):
        message.reply('foobar')
# мы описали функцию setup(), но здесь мы её не вызываем!


# main.py - основной файл бота
bot = ...  # создаём объект бота

import submodule_1  # импортируем модуль с функциями
# при вызове setup() будут заданы обработчики событий, описанные в ней
submodule_1.setup(bot)  # функции передаём объект бота (и другие объекты, если она их ожидает)
# функцию setup() нужно вызывать не более одного раза!
# так можно добавлять столько модулей, сколько требуется.

bot.run()  # дальше бота запускаем как обычно
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
vabka
@vabka
Токсичный шарпист
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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