Логотип YeaHub

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

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

Тренажёр

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

Обучение

Навыки

Задачи

Войти

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

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

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про Python: inheritance, composition, design

В чём разница между наследованием и композицией с точки зрения гибкости кода?

Проверяет понимание плюсов и минусов двух основных подходов к переиспользованию кода.

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

  • Наследование создаёт жёсткую связь между классами (изменения в родителе влияют на потомков).

  • Композиция гибче: можно динамически менять используемые объекты (например, подставлять разные реализации).

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

  1. Проблемы наследования:

    • Хрупкость: Изменение родительского класса может сломать дочерние.

    • Множественное наследование: Может привести к конфликтам методов (например, "алмаз смерти").

  2. Преимущества композиции:

    • Гибкость: Можно заменить компонент на лету (например, car.engine = ElectricEngine()).

    • Тестируемость: Легко подменять реальные объекты mock-ами.

Пример композиции vs наследования:

# Наследование (менее гибко)
class Bird:
    def fly(self):
        print("Лечу")

class Penguin(Bird):  # Пингвин не может летать, но наследует fly()!
    pass

# Композиция (гибче)
class FlyingBehavior:
    def fly(self):
        print("Лечу")

class Bird:
    def __init__(self, fly_behavior=None):
        self.fly_behavior = fly_behavior

    def fly(self):
        if self.fly_behavior:
            self.fly_behavior.fly()

penguin = Bird()  # Пингвин без fly_behavior не может летать.
  • Аватар

    Python Guru

    Sergey Filichkin

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

Уровень

  • Рейтинг:

    1

  • Сложность:

    7

Навыки

  • Python

    Python

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

#inheritance

#composition

#design

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

  • Аватар

    Python Guru

    Sergey Filichkin

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