tgoop.com/prog_way_blog/30
Last Update:
Зачем нужны абстрактные методы и классы?
Думаю, что многие знаю о существовании абстракции в языках программирования, но даже если вы не слышали об этом, то сейчас я объясню это в максимально простом виде 🙃
Давайте начну с примера из личного опыта. Может быть затяну из-за этого, но должно быть интересно. Так вот, недавно я работал в стартапе из кремниевой долины. Мы с командой создавали чат-бота, который будет работать во всех мессенджерах, будь то Telegram, VK, What's App, Viber или Facebook Messenger.
Как тут быть? У каждого мессенджера свой API со своими входными и выходными, мы столкнулись с проблемой стандартизации. Тогда мы просто взяли и написали свой интерфейс для каждого мессенджера. Стандартом интерфейса и стал абстрактный класс с абстрактными методами. Так что же это такое?
Абстрактный класс - класс, унаследованный от класса ABC
и содержащий абстрактные методы.
Абстрактный метод - метод класса, задекорированный декоратором @abstractmethod
и не имеющей реализации. Такой метод нужен только для объявления.
Давайте на примере, так будет яснее. Отдалённо повторим интерфейс мессенджера из нашего проекта:
from abc import ABC, abstractmethod
class Interface(ABC):
@abstractmethod
def send_message(self, chat_id, *args, **kwargs):
pass
@abstractmethod
def send_photo(self, chat_id, txt=None, *args, **kvargs):
pass
@abstractmethod
def send_file(self, file, txt=None, media=None):
pass
# Ну и так далее
Что происходит в этом примере? Я объявил класс Interface, который унаследован от абстрактного класса
ABC
. В этом классе я объявил 3 абстрактных метода. У них нет реализации. Суть абстрактного класса заключается лишь в том, чтобы обязать наследника класса Interface
реализовать все необходимые методы.Потом мы реализуем класс, например
Telegram
, где реализуем метод send_message
одним кодом, а в классе WhatsApp
реализуем тот же метод совсем по другому. Нас не волнует как это работает внутри, мы лишь описываем необходимый интерфейс взаимодействия.Надеюсь этот пример помог вам понять что это такое и немного разобраться.
#python
BY progway — программирование, IT

Share with your friend now:
tgoop.com/prog_way_blog/30