Короткий ответ
Наследование — механизм объектно-ориентированного программирования, при котором новый дочерний класс строится на основе родительского и наследует его атрибуты и методы. Дочерний класс может добавлять собственные члены и переопределять унаследованные, а базовый класс указывается в скобках после имени потомка.
Как это работает подробнее
- Термины. Класс, от которого наследуют, называют базовым или родительским, а новый — производным, дочерним или подклассом.
- Синтаксис. Наследование задаётся именем родителя в скобках после имени потомка, например
class Dog(Animal). - Переиспользование. Потомок получает все атрибуты и методы родителя, а изменения в родительском классе автоматически распространяются на наследников.
- Виды наследования. Python поддерживает и одиночное, и множественное наследование, в отличие от ряда других языков.
Пример кода
Базовый класс Animal и подкласс Dog
class Animal:
def __init__(self, name):
self.name = name
def speak(self):
return '...'
class Dog(Animal): # Dog наследует Animal
def speak(self): # переопределяем метод родителя
return 'Woof!'
rex = Dog('Rex')
print(rex.name) # Rex — атрибут унаследован
print(rex.speak()) # Woof!Что использовать на практике
- Общие члены. Выноси в базовый класс атрибуты и методы, общие для всех потомков, чтобы не дублировать код.
- Переопределение. Когда поведение потомка отличается, переопределяй метод родителя, сохраняя его сигнатуру.
- Логика родителя. Если внутри переопределённого метода нужна реализация родителя, обращайся к ней через
super().
Подводные камни
- Глубокие иерархии. Длинные цепочки наследования усложняют чтение кода; там, где возможно, предпочитай композицию.
- Множественное наследование. При нескольких родителях с одноимёнными методами легко ошибиться, какая реализация выполнится, — нужно следить за MRO.
- Пропущенный super(). Если не вызвать инициализацию родителя, экземпляр потомка останется без атрибутов базового класса.
Как отвечать на собеседовании
- Начни с определения наследования как механизма создания нового класса на основе родительского → поясни синтаксис
class Dog(Animal)→ приведи пример с переопределённым методом и унаследованным атрибутом → упомяни переиспользование кода и множественное наследование.