Python | Вопросы собесов
Сайт: https://easyoffer.ru/ Все каналы: t.me/+xGeAw6ckJ4liYzQy Контакт для рекламы: @sendme_ads
Show more📈 Analytical overview of Telegram channel Python | Вопросы собесов
Channel Python | Вопросы собесов (@python_easy_ru) in the Russian language segment is an active participant. Currently, the community unites 12 629 subscribers, ranking 9 915 in the Technologies & Applications category and 51 035 in the Russia region.
📊 Audience metrics and dynamics
Since its creation on невідомо, the project has demonstrated rapid growth, gathering an audience of 12 629 subscribers.
According to the latest data from 16 October, 2026, the channel demonstrates stable activity. Although there has been a change in the number of participants by -115 over the last 30 days and by -6 over the last 24 hours, overall reach remains high.
- Verification status: Not verified
- Engagement rate (ER): The average audience engagement rate is 6.29%. Within the first 24 hours after publication, content typically collects 4.30% reactions from the total number of subscribers.
- Post reach: On average, each post receives 794 views. Within the first day, a publication typically gains 543 views.
- Reactions and interaction: The audience actively supports content: the average number of reactions per post is 2.
- Thematic interests: Content is focused on key topics such as ставь, модуль, строка, docker, alice.
📝 Description and content policy
The author describes the resource as a platform for expressing subjective opinions:
“Сайт: https://easyoffer.ru/
Все каналы: t.me/+xGeAw6ckJ4liYzQy
Контакт для рекламы: @sendme_ads”
Thanks to the high frequency of updates (latest data received on 17 October, 2026), the channel maintains relevance and a high level of publication reach. Analytics show that the audience actively interacts with content, making it an important point of influence in the Technologies & Applications category.
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️⃣ Ограниченная масштабируемость: Централизация может стать узким местом, особенно в крупных системах с множеством взаимодействий.
🤔 Когда использовать данный паттерн?
➕ Когда нужно уменьшить связность между множеством взаимодействующих объектов.
➕ Когда нужно централизовать сложные взаимодействия между объектами.
➕ Когда изменения в одном объекте должны привести к изменениям в других, без необходимости явно связывать их.
Паттерн "Посредник" является мощным инструментом для управления взаимодействиями в системе, улучшая её модульность и уменьшая сложность.
🔥 ТОП ВОПРОСОВ С СОБЕСОВ
🔒 База собесов | 🔒 База тестовых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️⃣ Сложность поддержки: Поддержка сложных грамматик может стать трудной из-за большого числа классов.
🤔 Когда использовать данный паттерн?
➕ Когда есть необходимость интерпретировать и выполнять предложения на определенном языке.
➕ Когда грамматика языка относительно проста и стабильна.
➕ Когда нужно часто добавлять новые грамматические правила.
Паттерн "Интерпретатор" является мощным инструментом для определения и интерпретации грамматик, позволяя легко анализировать и выполнять структурированные тексты.
🔥 ТОП ВОПРОСОВ С СОБЕСОВ
🔒 База собесов | 🔒 База тестовых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️⃣ Требует дополнительных ресурсов: Создание объектов команд может потребовать дополнительных ресурсов.
🤔 Когда использовать данный паттерн?
➕ Когда нужно параметризовать объекты выполняемыми действиями.
➕ Когда требуется логирование, отмена и повтор запросов.
➕ Когда нужно передавать операции в очереди или как аргументы при вызове методов.
➕ Когда нужно разделить ответственность между отправителем запроса и объектом, выполняющим запрос.
Паттерн "Команда" является мощным инструментом для управления действиями и их инкапсуляции, обеспечивая гибкость и расширяемость системы.
🔥 ТОП ВОПРОСОВ С СОБЕСОВ
🔒 База собесов | 🔒 База тестовыхfrom abc import ABC, abstractmethod
# Абстрактный обработчик
class Handler(ABC):
def __init__(self, successor=None):
self._successor = successor
@abstractmethod
def handle(self, request):
pass
# Конкретный обработчик 1
class ConcreteHandler1(Handler):
def handle(self, request):
if request == "Condition1":
print("Handled by ConcreteHandler1")
elif self._successor:
self._successor.handle(request)
# Конкретный обработчик 2
class ConcreteHandler2(Handler):
def handle(self, request):
if request == "Condition2":
print("Handled by ConcreteHandler2")
elif self._successor:
self._successor.handle(request)
# Клиентский код
def client_code(handler, request):
handler.handle(request)
# Создание цепочки обработчиков
handler1 = ConcreteHandler1()
handler2 = ConcreteHandler2(handler1)
# Использование
client_code(handler2, "Condition1") # Handled by ConcreteHandler1
client_code(handler2, "Condition2") # Handled by ConcreteHandler2
client_code(handler2, "Condition3") # Ничего не происходит, так как запрос не обработан
🤔 Преимущества:
1️⃣ Гибкость в распределении обязанностей: Легко изменять цепочку обработчиков.
2️⃣ Изоляция отправителя запроса от его получателей: Отправитель запроса не знает, какой именно обработчик его обработает.
3️⃣ Уменьшение зависимости между объектами: Меньше жёстких привязок между отправителями и получателями запросов.
🤔 Недостатки:
1️⃣ Неопределенность обработки: Запрос может остаться необработанным, если ни один из обработчиков не сможет его обработать.
2️⃣ Сложность отладки: Из-за передачи запроса по цепочке может быть сложно определить, где именно он был обработан или отклонен.
🤔 Когда использовать данный паттерн?
➕ Когда необходимо передавать запросы нескольким объектам без жесткой привязки к конкретным обработчикам.
➕ Когда набор обработчиков и их порядок должен легко изменяться.
➕ Когда необходимо избежать жёсткой привязки отправителей запросов к их получателям.
Паттерн "Цепочка ответственности" является мощным инструментом для гибкого и динамичного распределения обязанностей по обработке запросов в системе.
🔥 ТОП ВОПРОСОВ С СОБЕСОВ
🔒 База собесов | 🔒 База тестовых