Как работает наследование классов ?

Спросят с вероятностью 3%



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



Как оно работает?




1️⃣Создание базового класса: Определяем базовый класс, содержащий общие атрибуты и методы.

2️⃣Создание подкласса: Определяем подкласс, который наследует базовый класс. Для этого указываем базовый класс в скобках при определении подкласса.

3️⃣Использование подкласса: Создаем экземпляры подкласса, которые будут иметь доступ к атрибутам и методам как подкласса, так и базового класса.



Базовый класс

class Animal:

def __init__(self, name):

self.name = name



def speak(self):

raise NotImplementedError("Subclass must implement abstract method")




Подклассы

class Dog(Animal):

def speak(self):

return f"{self.name} says Woof!"



class Cat(Animal):

def speak(self):

return f"{self.name} says Meow!"




Использование

dog = Dog("Buddy")

cat = Cat("Whiskers")



print(dog.speak()) # Выведет: Buddy says Woof!

print(cat.speak()) # Выведет: Whiskers says Meow!




Переопределение методов



Подклассы могут переопределять методы базового класса. В приведенном примере метод speak переопределен в каждом из подклассов.



Вызов методов базового класса



Подклассы могут вызывать методы базового класса с помощью функции super(). Это особенно полезно при переопределении метода __init__.

class Bird(Animal):

def __init__(self, name, can_fly):

super().__init__(name)

self.can_fly = can_fly



def speak(self):

return f"{self.name} says Tweet!"




Множественное наследование




Python поддерживает множественное наследование, что позволяет подклассу наследовать атрибуты и методы от нескольких базовых классов. Однако это может усложнить структуру и логику программы.

class Flyer:

def fly(self):

return "Flying high!"



class Swimmer:

def swim(self):

return "Swimming fast!"



class Duck(Animal, Flyer, Swimmer):

def speak(self):

return f"{self.name} says Quack!"




Полиморфизм



Позволяет использовать объекты разных классов через единый интерфейс. Например, все подклассы Animal могут вызывать метод speak, независимо от того, какой конкретный класс они представляют.

animals = [Dog("Buddy"), Cat("Whiskers"), Duck("Donald")]



for animal in animals:

print(animal.speak())



# Выведет:

# Buddy says Woof!

# Whiskers says Meow!

# Donald says Quack!




Наследование позволяет создавать новые классы на основе существующих, переопределяя или расширяя их функциональность. Подклассы наследуют атрибуты и методы базовых классов, могут переопределять их и добавлять новые. Полиморфизм обеспечивает единый интерфейс для работы с объектами разных классов.



👉 Можно посмотреть Примеры как отвечают люди на этот вопрос, или перейти К списку 1096 вопроса на Python разработчика. Ставь 👍 если нравится контент



🔐 База собесов | 🔐 База тестовых