Skip to content

Instantly share code, notes, and snippets.

@Khazbs
Created November 24, 2018 21:41
Show Gist options
  • Save Khazbs/161279dc4aa6862ad74b961bc58c5417 to your computer and use it in GitHub Desktop.
Save Khazbs/161279dc4aa6862ad74b961bc58c5417 to your computer and use it in GitHub Desktop.
Объяснение base.py

Что происходит в base.py?

Что это за мистический модуль под названием base? Он лежит в одной папке с vk.py и tg.py, может, он имеет с ними что-то общее? Сейчас разберемся.

Для чего нужен этот модуль?

Наследование и полиморфизм в модулях

Существует несколько способов связаться с нашим чат-ботом: можно написать ему ВКонтакте, можно написать ему в Telegram. Большинство операций, производимых над сообщениями, одинаковы как для сообщений из Telegram, так и для ВКонтакте или других потенциальных платформ. Модуль base является обобощенной версией посредников между нашим ботом и различными платформами, на которых пользователи будут общаться с ним. Этот модуль нужен для того, чтобы мы могли работать с сообщениями с разных платформ одинаково, независимо от того, откуда они пришли нашему боту.

Говоря простым языком, этот модуль является упрощенным чертежем для моста. Допустим, мы находимся на острове, который называется Чат-Бот. С этого острова нам надо наладить отношения со страной ВКонтактией, страной Телеграмией, а в будущем, возможно, и другими странами. Для этого нам нужно построить мосты. Вместо того, чтобы проектировать заново каждый из этих мостов, мы просто находим общие качества, которые нам нужны от этих мостов для налаживания отношений, и делаем упрощенный чертеж, которого нам будет достаточно для того, чтобы знать, что с ними делать дальше. А уже после этого наши инженеры построят мост в каждую из этих стран с учетом всех деталей. Как результат - по каждому из этих мостов мы можем одинаково ездить в разные страны и не думать об отличиях в их конструкции.

Что есть в этом модуле?

Класс Api

Этот класс сделан в целях совместимости различных классов-наследников.

Такой класс должен представлять из себя модель сервиса для получения и отправки сообщений пользователям. Конкретно в этом классе такой функционал не реализован, но если вы заглянете в другие модули, например, в vk.py, то увидете, что класс-наследник vk.VkApi эти функции очень даже предоставляет.

Внутри класса Api реализованы:

Прообраз метода get_message()

Реализация этого метода должна получать сообщения от пользователей.

Прообраз метода message()

Реализация этого метода должна отправлять сообщения пользователям.

Несмотря на то, что эти методы объявлены в классе Api, попытка вызвать любой из них закончится ошибкой "not implemented", то есть "не реализовано". Эти методы сделаны лишь для обеспечения совместимости наследуемых классов, то есть чтобы с разными наследниками класса Api можно было работать одинаково, как с самим Api. Нужный фукционал этих методов должен быть реализован уже в самих классах-наследниках.

Класс Message

Этот класс сделан в целях совместимости различных классов-наследников.

Класс Message является общей частичной моделью сообщения, с которым должен работать наш чат-бот. Если вы загляните в другие модули, например, в vk.py, то увидите, что класс-наследник vk.VkMessage является уже моделью конкретно сообщений ВКонтакте.

Внутри класса Message реализованы:

Свойство text

Текст сообщения.

Свойство user

Автор сообщения.

Свойство kind

Тип сообщения.

Свойство chat

Чат, в который отправлено сообщение.

Метод __repr__()

Этот метод представлет информацию о сообщении в виде строки формата "Сообщение <типа> от <отправителя>: <текст сообщения>". Результат выполнения - эта строка.

Прообраз метода reply()

Несмотря на то, что этот метод объявлен в классе Message, попытка его вызвать закончится ошибкой "not implemented", то есть "не реализовано". Этот метод сделан лишь для обеспечения совместимости наследуемых классов, то есть чтобы с разными наследниками класса Message можно было работать одинаково, как с самим Message.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment