Система уведомлений в Django

Наследники не реализуют общий send(message), а базовый метод молча ничего не делает. Нужен единый интерфейс отправителя, реальные реализации send и передача экземпляра, а не класса.

Короткий ответ

Что ответить на собеседовании

Наследники не реализуют общий send(message), а базовый метод молча ничего не делает. Нужен единый интерфейс отправителя, реальные реализации send и передача экземпляра, а не класса.

Подробный разбор

Ответ с пояснениями

Условие

Проведите ревью кода: оцените архитектурные решения, соблюдение принципов ООП, выявите возможные ошибки и предложите пути улучшения.

from enum import Enum

class NotificationTypes(Enum):
    EMAIL = 'email'
    SMS = 'sms'
    TELEGRAM = 'telegram'

class NotificationAbstract:
    def send(self, message):
        ...

class SendEmailNotification(NotificationAbstract):
    def send_email_notification(self):
        pass

class SendSMSNotification(NotificationAbstract):
    def send_sms_notification(self):
        pass

class SendTelegramNotification(NotificationAbstract):
    def send_telegram_notification(self):
        pass

class Newsletter:
    def create(self, message, notify_class):
        notify_class.send(message)

if __name__ == '__main__':
    ...

Ответ

Наследники не реализуют общий send(message), а базовый метод молча ничего не делает. Нужен единый интерфейс отправителя, реальные реализации send и передача экземпляра, а не класса.

Пример контракта:

from abc import ABC, abstractmethod

class NotificationSender(ABC):
    @abstractmethod
    def send(self, message):
        raise NotImplementedError

class Newsletter:
    def __init__(self, sender: NotificationSender):
        self.sender = sender

    def create(self, message):
        return self.sender.send(message)

Email/SMS/Telegram-адаптеры реализуют именно send. При передаче класса текущий вызов теряет self; при передаче экземпляра унаследованный метод просто вернёт None. Enum можно использовать в фабрике выбора адаптера. Повторы, таймауты и статус доставки относятся к отдельной инфраструктурной логике, а не к названиям методов.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее