uk
Feedback
Python | Вопросы собесов

Python | Вопросы собесов

Відкрити в Telegram

📈 Аналітичний огляд Telegram-каналу Python | Вопросы собесов

Канал Python | Вопросы собесов (@python_easy_ru) у мовному сегменті Російська є активним учасником. На даний момент спільнота об'єднує 13 101 підписників, посідаючи 9 734 місце в категорії Технології та додатки та 50 704 місце у регіоні Росія.

📊 Показники аудиторії та динаміка

З моменту свого створення невідомо, проект продемонстрував стрімке зростання, зібравши аудиторію у 13 101 підписників.

За останніми даними від 10 червня, 2026, канал демонструє стабільну активність. Хоча за останні 30 днів спостерігається зміна кількості учасників на -55, а за останні 24 години на 1, загальне охоплення залишається високим.

  • Статус верифікації: Не верифікований
  • Рівень залученості (ER): Середній показник залученості аудиторії становить 8.86%. Протягом перших 24 годин після публікації контент зазвичай збирає 5.51% реакцій від загальної кількості підписників.
  • Охоплення публікацій: В середньому кожен допис отримує 1 161 переглядів. Протягом першої доби публікація в середньому набирає 722 переглядів.
  • Реакції та взаємодія: Аудиторія активно підтримує контент: середня кількість реакцій на один пост – 3.
  • Тематичні інтереси: Контент зосереджений навколо ключових тем, таких як ставь, модуль, строка, docker, alice.

📝 Опис та контентна політика

Автор описує ресурс як майданчик для висловлення суб'єктивної думки:
Cайт: easyoffer.ru Реклама: @easyoffer_adv ВП: @easyoffer_vp Тесты t.me/+20tRfhrwPpM4NDQy Задачи t.me/+nsl4meWmhfQwNDVi Вакансии t.me/+cXGKkrOY2-w3ZTky

Завдяки високій частоті оновлень (останні дані отримано 11 червня, 2026), канал підтримує актуальність та високий рівень охоплення публікацій. Аналітика показує, що аудиторія активно взаємодіє з контентом, що робить його важливою точкою впливу в категорії Технології та додатки.

13 101
Підписники
+124 години
-147 днів
-5530 день
Архів дописів
📌 Что такое Наблюдатель (Observer) ? 💬 Спрашивают в 3% собеседований Паттерн "Наблюдатель" (Observer) — это поведенческий паттерн проектирования, который определяет зависимость "один ко многим" между объектами. Когда состояние одного объекта изменяется, все его зависимые объекты автоматически оповещаются и обновляются. Этот паттерн позволяет объектам подписываться на события, происходящие в другом объекте. 🤔 Зачем нужен данный паттерн? 1️⃣ Обновление состояния: Автоматически оповещает зависимые объекты о изменениях в объекте-наблюдаемом. 2️⃣ Разделение обязанностей: Позволяет разделить логику оповещения и обновления состояния между объектами. 3️⃣ Гибкость и расширяемость: Упрощает добавление новых наблюдателей и изменение их поведения без изменения кода объекта-наблюдаемого. 🤔 Как работает данный паттерн? Паттерн включает следующие компоненты: ➕ Субъект (Subject): Интерфейс или абстрактный класс, определяющий методы для добавления, удаления и оповещения наблюдателей. ➕ Конкретный субъект (ConcreteSubject): Реализация субъекта, хранящая состояние и оповещающая наблюдателей об изменениях. ➕ Наблюдатель (Observer): Интерфейс или абстрактный класс, определяющий метод для обновления состояния в ответ на оповещения. ➕ Конкретный наблюдатель (ConcreteObserver): Реализация наблюдателя, обновляющая своё состояние в ответ на изменения субъекта.
from abc import ABC, abstractmethod

# Интерфейс наблюдателя
class Observer(ABC):
    @abstractmethod
    def update(self, temperature):
        pass

# Конкретный наблюдатель
class TemperatureDisplay(Observer):
    def update(self, temperature):
        print(f"Temperature Display: Temperature updated to {temperature}°C")

class TemperatureAlert(Observer):
    def update(self, temperature):
        if temperature > 30:
            print("Temperature Alert: Temperature is too high!")

# Субъект
class WeatherStation:
    def __init__(self):
        self._observers = []
        self._temperature = None

    def add_observer(self, observer):
        self._observers.append(observer)

    def remove_observer(self, observer):
        self._observers.remove(observer)

    def set_temperature(self, temperature):
        self._temperature = temperature
        self.notify_observers()

    def notify_observers(self):
        for observer in self._observers:
            observer.update(self._temperature)

# Клиентский код
weather_station = WeatherStation()
display = TemperatureDisplay()
alert = TemperatureAlert()

weather_station.add_observer(display)
weather_station.add_observer(alert)

weather_station.set_temperature(25)  # Temperature Display: Temperature updated to 25°C
weather_station.set_temperature(35)  # Temperature Display: Temperature updated to 35°C
                                     # Temperature Alert: Temperature is too high!
🤔 Преимущества: 1️⃣ Автоматическое оповещение: Автоматически обновляет наблюдателей при изменении состояния субъекта. 2️⃣ Разделение обязанностей: Субъект не знает о конкретных наблюдателях и их логике. 3️⃣ Гибкость и расширяемость: Легко добавлять новых наблюдателей и изменять их поведение. 🤔 Недостатки: 1️⃣ Порядок уведомления: Порядок оповещения наблюдателей может быть важен и требует управления. 2️⃣ Потенциальные утечки памяти: Неудаленные наблюдатели могут привести к утечкам памяти. 🤔 Когда использовать данный паттерн? ➕ Когда изменение состояния одного объекта должно приводить к изменению других объектов. ➕ Когда необходимо централизованное оповещение об изменениях состояния. ➕ Когда нужно минимизировать связи между субъектом и наблюдателями. Паттерн "Наблюдатель" является мощным инструментом для управления зависимостями и оповещением в системе, упрощая взаимодействие между объектами и улучшая модульность кода. 🔥 ТОП ВОПРОСОВ С СОБЕСОВ 🔒 База собесов | 🔒 База тестовых

🤔 Что такое итератор в Python?
Anonymous voting

👨‍💻 Джун: Слушай, вот стажировку я прошел, где теперь можно чекнуть вакансии на работу? 🍷 Мидл: Ооо, тебе помогут ребята с
👨‍💻 Джун: Слушай, вот стажировку я прошел, где теперь можно чекнуть вакансии на работу? 🍷 Мидл: Ооо, тебе помогут ребята с канала Джун работает 💯 Карьеру нужно начинать с хорошими работодателями. Твое резюме будет ликовать, ведь контент выходит каждый день, работа ждет тебя, мой друг! 😏 Не упускай возможность и подписывайся, чтобы не потерять

Запустите рекламу в телеграм-каналах с Яндекс Директом Перфоманс-реклама теперь в телеграм-каналах ⚡ Яндекс Директ знает, как
Запустите рекламу в телеграм-каналах с Яндекс Директом Перфоманс-реклама теперь в телеграм-каналах ⚡ Яндекс Директ знает, как привлечь целевую аудиторию 💰👌 Попробовать #реклама yandex.ru О рекламодателе

📌 Что такое хранитель (Memento) ? 💬 Спрашивают в 3% собеседований Паттерн "Хранитель" (Memento) — это поведенческий паттерн проектирования, который позволяет сохранять и восстанавливать состояние объекта, не раскрывая его внутреннюю структуру. Это полезно для реализации функций отмены операций, восстановления предыдущих состояний и создания контрольных точек. 🤔 Зачем нужен данный паттерн? 1️⃣ Отмена и повтор операций: Позволяет легко отменять изменения и возвращаться к предыдущим состояниям. 2️⃣ Сохранение состояния: Позволяет сохранять состояния объектов в определённые моменты времени. 3️⃣ Инкапсуляция состояния: Хранит внутреннее состояние объекта, не нарушая его инкапсуляции. 🤔 Как работает данный паттерн? Паттерн включает следующие компоненты: ➕ Хранитель (Memento): Объект, который сохраняет состояние другого объекта. ➕ Создатель (Originator): Объект, чьё состояние сохраняется и восстанавливается. ➕ Опекун (Caretaker): Объект, который отвечает за хранение хранителей и, при необходимости, предоставляет их создателю для восстановления состояния.
# Хранитель
class Memento:
    def __init__(self, state):
        self._state = state

    def get_state(self):
        return self._state

# Создатель
class TextEditor:
    def __init__(self):
        self._state = ""

    def type(self, text):
        self._state += text

    def save(self):
        return Memento(self._state)

    def restore(self, memento):
        self._state = memento.get_state()

    def get_state(self):
        return self._state

# Опекун
class History:
    def __init__(self):
        self._mementos = []

    def save(self, memento):
        self._mementos.append(memento)

    def undo(self):
        if not self._mementos:
            return None
        return self._mementos.pop()

# Клиентский код
editor = TextEditor()
history = History()

# Пользователь вводит текст
editor.type("Hello, ")
editor.type("world!")
print(editor.get_state())  # Hello, world!

# Сохранение состояния
history.save(editor.save())

# Продолжение ввода текста
editor.type(" How are you?")
print(editor.get_state())  # Hello, world! How are you?

# Восстановление состояния
editor.restore(history.undo())
print(editor.get_state())  # Hello, world!
🤔 Преимущества: 1️⃣ Отмена и восстановление: Легко реализовать функции отмены и восстановления. 2️⃣ Инкапсуляция состояния: Состояние сохраняется и восстанавливается без нарушения инкапсуляции. 3️⃣ Упрощение управления состоянием: Позволяет создавать контрольные точки состояния объекта. 🤔 Недостатки: 1️⃣ Увеличение использования памяти: Сохранение состояния может потребовать значительных ресурсов, особенно для больших объектов. 2️⃣ Сложность управления: В сложных системах может быть трудно управлять множеством состояний и хранителей. 🤔 Когда использовать данный паттерн? ➕ Когда необходимо реализовать функции отмены и восстановления. ➕ Когда нужно сохранять состояние объекта в определённые моменты времени. ➕ Когда важно сохранять состояние объекта, не нарушая его инкапсуляции. Паттерн "Хранитель" является мощным инструментом для управления состоянием объектов, предоставляя возможность сохранять и восстанавливать состояния без раскрытия внутренней структуры объекта. 🔥 ТОП ВОПРОСОВ С СОБЕСОВ 🔒 База собесов | 🔒 База тестовых

📕 Прогер, как ты расширяешь свой кругозор в сфере IT? Не достаточно знать что-то одно, мысля глобально и изучая смежные отра
📕 Прогер, как ты расширяешь свой кругозор в сфере IT? Не достаточно знать что-то одно, мысля глобально и изучая смежные отрасли, ты не только становишься умнее, но и увеличиваешь свою востребованность и свой заработок. 🗿 Не обязательно читать заумные книги и смотреть подкасты - это долго. У нас есть решение: 🔥 Полезные статьи - концентрат знаний. 🔥 Советы - короткие сообщения, которые будут увеличивать твою эффективность. 🔥 Инструменты - tool-сайты в разы упростят и ускорят твою работу. 🧑‍💻 Время, силы, желание - ресурсы, которые нужно использовать с умом. Подпишись на канал Заметки прогера, IT ниша скажет "спасибо" за такого специалиста.

Стажировки и хакатоны для начинающих айтишников Где айтишнику найти стажировку, которая не требует опыта работы? Как узнать,
Стажировки и хакатоны для начинающих айтишников Где айтишнику найти стажировку, которая не требует опыта работы? Как узнать, в каких компаниях не потратишь время зря и научишься чему-то полезному? Подписаться на канал с IT-стажировками, где отбирают самые толковые предложения и делятся: — стажировками для айтишников с минимальным опытом работы или без него; — анонсами хакатонов, которые будут выгодно смотреться в резюме; — карьерными и образовательными ивентами для прокачки hard и soft skills. Подписаться #реклама О рекламодателе

🤔 Что такое MRO?
Anonymous voting

😭 Джун: Как мне найти работу в IT, если опыта нет? 🧑‍💻 Мидл: Просто зайди на канал Джун стажер и подбери стажировку по душ
😭 Джун: Как мне найти работу в IT, если опыта нет? 🧑‍💻 Мидл: Просто зайди на канал Джун стажер и подбери стажировку по душе. 📕 Админы отбирают самые сочные вакансии от ведущих компаний, к тому же контент выходит каждый день. 🔥 Не упускай возможность и подписывайся, чтобы не потерять

Как повысить эффективность вебинаров? Организация продающего вебинара - не простая задача, ведь необходимо предусмотреть множ
Как повысить эффективность вебинаров? Организация продающего вебинара - не простая задача, ведь необходимо предусмотреть множество деталей: удобную дату, вовлекающий контент, методы продвижения и взаимодействия с участниками. Вебинары от МТС Линк помогают привлекать новых клиентов и увеличивать конверсию из участника в лид. В сервисе доступен анализ поведения пользователей во время вебинара, синхронный перевод, автовебинары и интерактивные инструменты для вовлечения участников. Делимся методичкой с кейсами, чек-листами и инструкциями для маркетологов, PR и event-менеджеров, чтобы сделать вебинары эффективным инструментом для лидогенерации. Получите методичку бесплатно на сайте. Скачать #реклама 16+ mts-link.ru О рекламодателе

📌 Что такое паттерн Посредник (Mediator) ? 💬 Спрашивают в 3% собеседований Паттерн "Посредник" (Mediator) — это поведенческий паттерн проектирования, который позволяет уменьшить зависимости между объектами, упрощая их взаимодействие. Посредник инкапсулирует способ взаимодействия множества объектов, предотвращая их прямые ссылки друг на друга, что уменьшает связность системы и улучшает её модульность. 🤔 Зачем нужен данный паттерн? 1️⃣ Уменьшение связности: Обеспечивает слабую связанность между взаимодействующими объектами, что упрощает изменение и повторное использование классов. 2️⃣ Упрощение взаимодействий: Объекты взаимодействуют через посредника, что упрощает управление их взаимодействиями. 3️⃣ Централизованный контроль: Все взаимодействия проходят через посредника, что облегчает отладку и тестирование системы. 🤔 Как работает данный паттерн? Паттерн включает следующие компоненты: ➕ Посредник (Mediator): Интерфейс, определяющий методы для взаимодействия с коллегами. ➕ Конкретный посредник (ConcreteMediator): Реализует методы взаимодействия, определённые в интерфейсе посредника. ➕ Коллеги (Colleague): Классы, которые обмениваются информацией через посредника. Каждый коллега знает о посреднике, но не знает о других коллегах.
from abc import ABC, abstractmethod

# Посредник
class Mediator(ABC):
    @abstractmethod
    def notify(self, sender, event):
        pass

# Конкретный посредник
class ConcreteMediator(Mediator):
    def __init__(self):
        self.button = None
        self.textbox = None

    def set_button(self, button):
        self.button = button

    def set_textbox(self, textbox):
        self.textbox = textbox

    def notify(self, sender, event):
        if event == "button_clicked":
            self.textbox.enable()
        elif event == "textbox_filled":
            self.button.enable()

# Коллеги
class Button:
    def __init__(self, mediator):
        self.mediator = mediator
        self.enabled = False

    def click(self):
        print("Button clicked.")
        self.mediator.notify(self, "button_clicked")

    def enable(self):
        self.enabled = True
        print("Button enabled.")

class TextBox:
    def __init__(self, mediator):
        self.mediator = mediator
        self.enabled = False

    def fill(self):
        print("TextBox filled.")
        self.mediator.notify(self, "textbox_filled")

    def enable(self):
        self.enabled = True
        print("TextBox enabled.")

# Клиентский код
mediator = ConcreteMediator()
button = Button(mediator)
textbox = TextBox(mediator)

mediator.set_button(button)
mediator.set_textbox(textbox)

button.click()  # Button clicked. TextBox enabled.
textbox.fill()  # TextBox filled. Button enabled.
🤔 Преимущества: 1️⃣ Уменьшение связности: Упрощает изменение и повторное использование объектов, уменьшает количество прямых зависимостей между ними. 2️⃣ Упрощение взаимодействий: Все взаимодействия централизованы, что упрощает управление ими. 3️⃣ Централизованный контроль: Облегчает отладку и тестирование, так как все взаимодействия проходят через один объект. 🤔 Недостатки: 1️⃣ Централизация логики: Посредник может стать слишком сложным и трудным для поддержки, если будет обрабатывать слишком много логики. 2️⃣ Ограниченная масштабируемость: Централизация может стать узким местом, особенно в крупных системах с множеством взаимодействий. 🤔 Когда использовать данный паттерн? ➕ Когда нужно уменьшить связность между множеством взаимодействующих объектов. ➕ Когда нужно централизовать сложные взаимодействия между объектами. ➕ Когда изменения в одном объекте должны привести к изменениям в других, без необходимости явно связывать их. Паттерн "Посредник" является мощным инструментом для управления взаимодействиями в системе, улучшая её модульность и уменьшая сложность. 🔥 ТОП ВОПРОСОВ С СОБЕСОВ 🔒 База собесов | 🔒 База тестовых

👨‍💻 Будущий специалист, ты знаешь, какая самая частая ошибка новичка в сфере IT? Отсутствие практики убивает в тебе потенциал ✈️ Как с этим бороться, мой друг? Найди работу и прокачивай свои скилы на конкретных задачах 🔥 У нас ты будешь находить большое количество вакансий каждый день. Понятие работы перестанет быть для тебя размытым. Подпишись на канал и не откладывай свой прогресс в долгий ящик.

Реклама для бизнеса любого уровня в Яндекс Директе Создайте эффективную рекламную кампанию с алгоритмами Яндекс Директа 👌 Начните прямо сейчас ⚡ Зарегистрироваться #реклама direct.yandex.ru О рекламодателе

🤔 Как в Python определить функцию, которая принимает переменное количество аргументов?
Anonymous voting

🧑‍💻 Если твой английский позволяет ответить только на вопрос "Do you speak English", то с этим нужно что-то делать, будучи программистом. 🫤 Ты в курсе, что ... - говорят по-английски — 20% из всех людей. - Большое кол-во IT документации написано на английском. Хочешь понимать код лучше? Изучи язык, который используется в его основе. 📕 На нашем канале ты постепенно будешь набираться опыта, в этом тебе помогут: - Тесты для изучения английского: проверьте свои знания на практике. - Английский через мемы: учите язык весело и с интересом. - Шпаргалки для повторения: закрепите знания быстро и эффективно. - Английский сленг программиста: станьте настоящим профи в коммуникации. 🔥 Маленький шаг в изучении иностранного откроет перед тобой большие возможности будущего специалиста и значительно повысит твое зп. 🌸 Подпишись, do it!

Хотите переехать в Германию? А вы знали, что для получения ВНЖ в Германию не требуется высшее образование, если вы IT-специалист? Да, начиная с 18 ноября, для айтишников отменены требования к высшему образованию. Но важно доказать ваш профессионализм! ✅ Необходим минимум 3-х летний опыт работы в течение последних 7 лет. Вы соответствуете условиям и ищете новые проекты в Европе? 📱 Обратитесь к экспертам Intermigro для получения бесплатной консультации и помощи в оформлении необходимых документов. Перейти на сайт #реклама intermigro.com О рекламодателе

📌 Что такое паттерн Интерпретатор (Interpreter) ? 💬 Спрашивают в 3% собеседований Паттерн "Интерпретатор" (Interpreter) — это поведенческий паттерн проектирования, который предоставляет способ определить грамматику для определенного языка и интерпретировать предложения на этом языке. Паттерн используется для анализа и выполнения структурированных текстов, таких как математические выражения, команды или сценарии. 🤔 Зачем нужен данный паттерн? 1️⃣ Анализ и выполнение текстов: Позволяет анализировать и выполнять предложения на специальном языке. 2️⃣ Упрощение грамматики: Разделяет грамматику языка и её интерпретацию, что упрощает понимание и изменение правил языка. 3️⃣ Расширяемость: Легко добавлять новые правила и расширять язык. 🤔 Как работает данный паттерн? Паттерн включает следующие компоненты: ➕ Контекст (Context): Содержит информацию, глобальную для всех интерпретаторов. ➕ Абстрактное выражение (AbstractExpression): Интерфейс или абстрактный класс для всех выражений. ➕ Конкретные выражения (TerminalExpression и NonTerminalExpression): Классы, реализующие конкретные правила грамматики. ➕ Клиент (Client): Построит и использует объектную структуру абстрактного синтаксического дерева.
from abc import ABC, abstractmethod

# Контекст (необязательный компонент)
class Context:
    pass

# Абстрактное выражение
class Expression(ABC):
    @abstractmethod
    def interpret(self, context):
        pass

# Терминальное выражение (число)
class Number(Expression):
    def __init__(self, value):
        self.value = value

    def interpret(self, context):
        return self.value

# Нетерминальное выражение (сложение)
class Add(Expression):
    def __init__(self, left, right):
        self.left = left
        self.right = right

    def interpret(self, context):
        return self.left.interpret(context) + self.right.interpret(context)

# Нетерминальное выражение (вычитание)
class Subtract(Expression):
    def __init__(self, left, right):
        self.left = left
        self.right = right

    def interpret(self, context):
        return self.left.interpret(context) - self.right.interpret(context)

# Клиентский код
def main():
    # Построение выражения: 1 + 2 - 3
    expression = Subtract(Add(Number(1), Number(2)), Number(3))
    context = Context()  # Контекст может использоваться для передачи информации
    result = expression.interpret(context)
    print(result)  # 0

if __name__ == "__main__":
    main()
🤔 Преимущества: 1️⃣ Простота добавления новых правил: Легко добавлять новые грамматические правила и расширять язык. 2️⃣ Четкая структура: Грамматика и интерпретация языка разделены, что упрощает понимание и изменение. 🤔 Недостатки: 1️⃣ Ограниченная производительность: Может быть неэффективным для сложных или очень больших грамматик. 2️⃣ Сложность поддержки: Поддержка сложных грамматик может стать трудной из-за большого числа классов. 🤔 Когда использовать данный паттерн? ➕ Когда есть необходимость интерпретировать и выполнять предложения на определенном языке. ➕ Когда грамматика языка относительно проста и стабильна. ➕ Когда нужно часто добавлять новые грамматические правила. Паттерн "Интерпретатор" является мощным инструментом для определения и интерпретации грамматик, позволяя легко анализировать и выполнять структурированные тексты. 🔥 ТОП ВОПРОСОВ С СОБЕСОВ 🔒 База собесов | 🔒 База тестовых

Приводите соискателей на hh.ru и зарабатывайте на cpa.hh Вебмастер, или привлекаете трафик в интернете? Подключайтесь к партн
Приводите соискателей на hh.ru и зарабатывайте на cpa.hh Вебмастер, или привлекаете трафик в интернете? Подключайтесь к партнерской программе CPA.HH.RU и приводите соискателей по модели CPA в HR вертикали: - Прямые офферы от работодателей на cpa.hh.ru; - Короткий холд (от 7 дней); - Автоматическая обратная связь по лидам. Узнать больше #реклама hh.ru О рекламодателе

🤔 Какой метод используется для чтения всего содержимого файла в Python?
Anonymous voting

📌 Что такое паттерн Команда (Command) ? 💬 Спрашивают в 3% собеседований Паттерн "Команда" (Command) — это поведенческий паттерн проектирования, который превращает запросы в объекты, позволяя передавать их как аргументы при вызове методов, ставить запросы в очередь, логировать их и поддерживать отмену операций. 🤔 Зачем нужен данный паттерн? 1️⃣ Инкапсуляция запросов: Позволяет инкапсулировать запросы в виде объектов. 2️⃣ Разделение ответственности: Отделяет отправителя запроса от объекта, выполняющего запрос. 3️⃣ Логирование и отмена: Упрощает реализацию логирования, очереди запросов и отмены операций. 4️⃣ Параметризация объектов: Позволяет параметризовать объекты с операциями. 🤔 Как работает данный паттерн? Паттерн включает следующие компоненты: ➕ Команда (Command): Интерфейс с методом execute. ➕ Конкретные команды (ConcreteCommand): Реализуют интерфейс команды, инкапсулируя действия для конкретного запроса. ➕ Получатель (Receiver): Объект, который выполняет действие по запросу. ➕ Отправитель (Invoker): Объект, который инициирует выполнение команды. ➕ Клиент (Client): Создаёт объекты команд и связывает их с получателями.
from abc import ABC, abstractmethod

# Интерфейс команды
class Command(ABC):
    @abstractmethod
    def execute(self):
        pass

# Получатель
class Light:
    def on(self):
        print("Light is ON")

    def off(self):
        print("Light is OFF")

# Конкретная команда включения света
class LightOnCommand(Command):
    def __init__(self, light):
        self._light = light

    def execute(self):
        self._light.on()

# Конкретная команда выключения света
class LightOffCommand(Command):
    def __init__(self, light):
        self._light = light

    def execute(self):
        self._light.off()

# Отправитель
class RemoteControl:
    def __init__(self):
        self._commands = {}

    def set_command(self, button, command):
        self._commands[button] = command

    def press_button(self, button):
        if button in self._commands:
            self._commands[button].execute()
        else:
            print("No command assigned to this button")

# Клиентский код
light = Light()
light_on = LightOnCommand(light)
light_off = LightOffCommand(light)

remote = RemoteControl()
remote.set_command("ON", light_on)
remote.set_command("OFF", light_off)

remote.press_button("ON")  # Light is ON
remote.press_button("OFF") # Light is OFF
remote.press_button("UNASSIGNED") # No command assigned to this button
🤔 Преимущества: 1️⃣ Инкапсуляция запросов: Позволяет инкапсулировать действия в объекты команд. 2️⃣ Поддержка отмены и логирования: Упрощает реализацию отмены операций и логирования. 3️⃣ Гибкость и расширяемость: Легко добавлять новые команды без изменения существующего кода. 4️⃣ Разделение ответственности: Разделяет ответственность между отправителем и получателем. 🤔 Недостатки: 1️⃣ Усложнение кода: Добавление множества классов команд может усложнить код. 2️⃣ Требует дополнительных ресурсов: Создание объектов команд может потребовать дополнительных ресурсов. 🤔 Когда использовать данный паттерн? ➕ Когда нужно параметризовать объекты выполняемыми действиями. ➕ Когда требуется логирование, отмена и повтор запросов. ➕ Когда нужно передавать операции в очереди или как аргументы при вызове методов. ➕ Когда нужно разделить ответственность между отправителем запроса и объектом, выполняющим запрос. Паттерн "Команда" является мощным инструментом для управления действиями и их инкапсуляции, обеспечивая гибкость и расширяемость системы. 🔥 ТОП ВОПРОСОВ С СОБЕСОВ 🔒 База собесов | 🔒 База тестовых