Встречается на 1% собеседований по Python

В чем разница между композицией и наследованным в Python

Композиция и наследование — два разных подхода к организации кода.

Наследование создает отношение "является" (is-a). Дочерний класс наследует все методы и атрибуты родительского:

python
class Animal:
    def speak(self):
        pass

class Dog(Animal):
    def speak(self):
        return "Woof!"

Композиция создает отношение "имеет" (has-a). Класс содержит экземпляр другого класса как атрибут:

python
class Engine:
    def start(self):
        return "Engine started"

class Car:
    def __init__(self):
        self.engine = Engine()
    
    def start(self):
        return self.engine.start()

Ключевые различия:

  • Наследование жестко связывает классы, композиция дает больше гибкости
  • При изменении родительского класса могут сломаться все дочерние
  • Композиция лучше подходит для случаев, когда поведение может меняться динамически

В Python предпочтительнее использовать композицию там, где это возможно, следуя принципу "композиция предпочтительнее наследования".

Следующий вопрос

Это единственный вопрос по вашему фильтру

как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы