Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Задачи

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про Python: open, closed

Раскройте принцип Open/Closed

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

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

Принцип Open/Closed означает, что код должен быть открыт для расширения, но закрыт для изменения. Это значит, что новую функциональность нужно добавлять, не переписывая существующий код. Такой подход снижает риск сломать уже работающую систему. Обычно он достигается с помощью абстракций и полиморфизма. Это делает код устойчивым к изменениям требований.

Длинный ответ

Принцип Open/Closed помогает писать код, который не боится изменений и со временем не превращается в набор хаотичных правок.

Определение

Open/Closed Principle гласит: программные сущности должны быть открыты для расширения, но закрыты для изменения.

В чем основная идея

Важно не запрещать изменения полностью, а:

  • не менять уже протестированный код

  • добавлять новую логику через расширение

Это особенно важно в продакшене, где любое изменение может привести к регрессии.

Пример нарушения принципа

def calculate_discount(user_type, price):
    if user_type == "regular":
        return price * 0.95
    elif user_type == "vip":
        return price * 0.9

Проблемы:

  • при добавлении нового типа пользователя нужно менять функцию

  • растет количество условий

  • увеличивается риск ошибки

Пример соблюдения принципа

class DiscountPolicy:
    def apply(self, price):
        pass

class RegularDiscount(DiscountPolicy):
    def apply(self, price):
        return price * 0.95

class VipDiscount(DiscountPolicy):
    def apply(self, price):
        return price * 0.9

Теперь:

  • новая логика добавляется новым классом

  • существующий код не меняется

  • система легко расширяется

Где чаще всего применяется

  • бизнес-правила

  • стратегии обработки данных

  • системы плагинов

  • правила валидации

Вывод

Если при добавлении новой функциональности приходится менять старый код — это сигнал, что принцип Open/Closed нарушен.

  • Аватар

    Python Guru

    Sergey Filichkin

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.

Уровень

  • Рейтинг:

    5

  • Сложность:

    7

Навыки

  • Python

    Python

Ключевые слова

#open

#closed

Подпишись на Python Developer в телеграм

  • Аватар

    Python Guru

    Sergey Filichkin

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.