9.3. Наследование и полиморфизм.

Онлайн-тренажер Python 3 для начинающих

Теория без воды. Задачи с автоматической проверкой. Подсказки на русском языке. Работает в любом современном браузере.

начать бесплатно

Самоучитель Python 3, собранный из материалов данного сайта. Предназначен в основном для тех, кто хочет изучить язык программирования Python с нуля.

 
Наследование и полиморфизм — это фундаментальные концепции объектно-ориентированного программирования (ООП), которые позволяют создавать гибкие и повторно используемые программы. Давайте подробнее рассмотрим эти концепции и приведем дополнительные примеры для лучшего понимания.
 
Наследование
Наследование позволяет одному классу (подклассу) наследовать атрибуты и методы другого класса (суперкласса). Это помогает повторно использовать код и создавать иерархии классов.
 
Объявление наследования
class BaseClass:
    def __init__(self, base_attr):
        self.base_attr = base_attr

    def base_method(self):
        print("Method from BaseClass")

class DerivedClass(BaseClass):
    def __init__(self, base_attr, derived_attr):
        super().__init__(base_attr)
        self.derived_attr = derived_attr

    def derived_method(self):
        print("Method from DerivedClass")

# Создание объекта DerivedClass
derived = DerivedClass("Base Attribute", "Derived Attribute")

# Вызов метода базового класса
derived.base_method()  # Вывод: Method from BaseClass

# Вызов метода производного класса
derived.derived_method()  # Вывод: Method from DerivedClass
 
Полиморфизм
Полиморфизм позволяет объектам разных классов предоставлять разные реализации одного и того же метода. Это делает код более гибким и расширяемым.
 
Пример полиморфизма
class Animal:
    def make_sound(self):
        pass

class Dog(Animal):
    def make_sound(self):
        print("Woof!")

class Cat(Animal):
    def make_sound(self):
        print("Meow!")

# Создание объектов и вызов метода make_sound()
dog = Dog()
cat = Cat()

dog.make_sound()  # Вывод: Woof!
cat.make_sound()  # Вывод: Meow!
 
Полиморфизм через общий интерфейс
Благодаря полиморфизму можно использовать объекты разных классов через их общий интерфейс, что упрощает работу с различными типами объектов.
animals = [Dog(), Cat()]

for animal in animals:
    animal.make_sound()
# Вывод:
# Woof!
# Meow!
 
Преимущества наследования и полиморфизма
  • Повторное использование кода: можно использовать функциональность базового класса в производных классах.
  • Упрощение кода: можно создавать иерархии классов, делая код более организованным и понятным.
  • Расширяемость: можно легко добавлять новую функциональность в производные классы, не затрагивая базовый код.
 
Дополнительные примеры
 
Пример с геометрическими фигурами
Рассмотрим пример, где у нас есть базовый класс Shape и производные классы Circle и Rectangle, которые переопределяют метод area().
import math

class Shape:
    def area(self):
        pass

class Circle(Shape):
    def __init__(self, radius):
        self.radius = radius

    def area(self):
        return math.pi * self.radius ** 2

class Rectangle(Shape):
    def __init__(self, width, height):
        self.width = width
        self.height = height

    def area(self):
        return self.width * self.height

# Создание объектов и вызов метода area()
circle = Circle(5)
rectangle = Rectangle(4, 6)

print(circle.area())     # Вывод: 78.53981633974483
print(rectangle.area())  # Вывод: 24
 
Пример с транспортными средствами
Рассмотрим пример, где у нас есть базовый класс Vehicle и производные классы Car и Bike, которые переопределяют метод move().
class Vehicle:
    def move(self):
        pass

class Car(Vehicle):
    def move(self):
        print("Car is moving")

class Bike(Vehicle):
    def move(self):
        print("Bike is moving")

# Создание объектов и вызов метода move()
car = Car()
bike = Bike()

car.move()  # Вывод: Car is moving
bike.move()  # Вывод: Bike is moving

# Использование полиморфизма через общий интерфейс
vehicles = [Car(), Bike()]

for vehicle in vehicles:
    vehicle.move()
# Вывод:
# Car is moving
# Bike is moving

категории

ТЕОРИЯ

  • Введение в Python
  • Основы программирования на Python
  • Управляющие конструкции
  • Структуры данных
  • Функции и модули
  • Обработка исключений
  • Работа с файлами и потоками
  • файловая система
  • Объектно-ориентированное программирование (ООП)
  • Регулярные выражения
  • Дополнительные темы

Мы в соцсетях