Каковы основные принципы и синтаксис наследования в Python?

Ответ

Наследование — это один из ключевых принципов ООП, который позволяет создавать новый класс (потомок) на основе существующего (родитель), перенимая его свойства и методы. Основная цель — повторное использование кода и построение иерархии классов по принципу "is-a" (является).

Синтаксис

Для наследования родительский класс указывается в скобках после имени класса-потомка.

# Родительский (базовый) класс
class Animal:
    def __init__(self, name):
        self.name = name

    def speak(self):
        raise NotImplementedError("Потомок должен реализовать этот метод")

# Дочерний класс, наследующий от Animal
class Dog(Animal):
    # Переопределение (override) метода родителя
    def speak(self):
        return f"{self.name} говорит Гав!"

# Другой дочерний класс
class Cat(Animal):
    def speak(self):
        return f"{self.name} говорит Мяу!"

my_dog = Dog("Рекс")
print(my_dog.speak())  # Вывод: Рекс говорит Гав!

Расширение функциональности с super()

Функция super() позволяет вызвать метод родительского класса из дочернего. Это полезно для расширения, а не полной замены поведения.

class LoudDog(Dog):
    def speak(self):
        # Вызываем оригинальный метод speak() из родительского класса Dog
        original_sound = super().speak()
        # Добавляем новую функциональность
        return original_sound.upper()

my_loud_dog = LoudDog("Бобик")
print(my_loud_dog.speak()) # Вывод: БОБИК ГОВОРИТ ГАВ!

Ключевые аспекты

  • Переопределение методов: Потомок может предоставить свою реализацию метода, который уже есть у родителя.
  • super(): Инструмент для доступа к методам родительского класса.
  • Проверка иерархии:
    • isinstance(obj, Class): проверяет, является ли объект экземпляром класса или его потомков.
    • issubclass(Child, Parent): проверяет, является ли класс потомком другого класса.