AIOgram3 5.1. Создание структуры
В этом посте начнём создавать структуру проекта бота. Разберёмся с пакетами в Python и Dataclass.
Дополнительные материалы
Для скачивания материалов необходимо войти или зарегистрироваться
Файлы также можно получить в Telegram-боте по коду: 817863
Реклама
Большинство проектов не ограничиваются одним лишь файлом main.py
, напротив, часто проекты состоят из множества файлов с кодом конкретной логики. Для этого в Python предусмотрена "пакетная" система. Пакет является директорией, которая содержит в себе модули и подпакеты. Он позволяет логически объединять связанный функционал и предоставляет простой способ управления зависимостями и кодом в рамках проекта.
Python Package.
Если, вы работаете в PyCharm или другой Python-направленной IDE, то достаточно в контекстном меню директории выбрать "New - Python Package".
Но создать пакет можно и вручную.
Для этого необходимо создать директорию с необходимым именем пакета. Внутри директории создать пустой файл __init.py__
. Данный файл сообщит интерпретатору, что директория является пакетом.
Пакет botlogic.
Создадим основной пакет botlogic
со всей будущей логикой.
В этом пакете создадим файл settings.py
.
В этом файле будут располагаться, при необходимости, настройки бота. Пока, что мы перенесём в него токен бота и добавим ID администратора.
Тут, для удобства применим ООП.
Те, кто уже успели испугаться, расслабьтесь, в создании бота ООП либо крайне мало, либо нет вовсе. Тут я применяю его банально для удобства.
Датакласс Secrets.
Создадим класс датакласс Secrets
и в нём два поля token
и admin_id
:
from dataclasses import dataclass
@dataclass
class Secrets:
token: str = 'ваш_токен'
admin_id: int = 12345
Разберём, что тут происходит.
Мы создали класс Secrets
и определили два поля:
- Строковое
token
в котором указываем полученный отBotFather
токен бота. - Целочисленное
admin_id
в котором необходимо указать ваш Telegram-ID, но это будет несколькими постами далее, пока просто заполните любым числом.
Далее должно было быть несколько методов, таких как __init__
и геттеры полей, но нам тут всё это не нужно. Для избегания большого количества ненужного кода, мы используем декоратор @dataclass
.
Декоратор @dataclass
- позволяет автоматически сгенерировать методы класса для работы с данными.
Когда применяется декоратор @dataclass
к классу, он автоматически добавляет реализацию необходимых методов, таких как:
__init__
: Создает конструктор класса, принимающий значения для каждого атрибута.__repr__
: Создает строковое представление объекта, которое используется при вызовеrepr()
.
И ряда других.
Кроме того, декоратор@dataclass
позволяет использовать аннотации типов для объявления типов полей класса, что упрощает чтение кода.
Продолжение в следующем посте.
Все статьи