Курс 3.4 · Раздел 04 · Урок 4.2

Иерархия классов

Разберём тему на понятных примерах и закрепим её практикой.

Ученик и ИИ-наставник изучают тему «Иерархия классов»
4.2 — Иерархия классов

Материал урока

Когда искусственный интеллект решает задачи, связанные с обработкой различных объектов, ему часто необходимо организовать эти объекты в иерархии. Это помогает ИИ лучше понимать общие свойства объектов и их различия. Для этого ИИ может использовать наследование, чтобы создать классы с общими свойствами и методами.

Представление иерархии классов

Давай добавим еще один класс, который будет представлять любую геометрическую фигуру — Shape. Этот класс будет базовым для всех других геометрических фигур, таких как круг, прямоугольник и квадрат. Это поможет ИИ организовать фигуры в единую иерархию.

class Shape:
    def __init__(self):
        # ИИ знает, что у всех фигур есть общие свойства, которые мы можем добавить позже
        pass

Теперь у нас есть базовый класс Shape, который описывает общие черты всех фигур. Другие классы, такие как Circle (Круг), Rectangle (Прямоугольник) и Square (Квадрат), будут подклассами класса Shape. Это означает, что каждый из них будет наследовать свойства и методы, определенные в базовом классе.

Как создать наследование

Наследование класса B от класса A в Python выполняется следующим образом:

class A:
    pass

class B(A):
    pass

В этом примере класс B наследует от класса A, что означает, что все свойства и методы класса A будут доступны в классе B. Это можно применить для нашей иерархии геометрических фигур.

Пример иерархии классов

Теперь создадим полную иерархию для классов фигур. Пусть Shape будет базовым классом, от которого будут наследоваться классы Circle, Rectangle и Square.

class Shape:
    def __init__(self):
        pass

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

    def area(self):
        return pi * self.r ** 2

class Rectangle(Shape):
    def __init__(self, a, b):
        super().__init__()
        self.a = a
        self.b = b

    def area(self):
        return self.a * self.b

class Square(Rectangle):
    def __init__(self, a):
        super().__init__(a, a)

Объяснение кода:

  1. Класс Shape — это базовый класс, который пока не содержит никаких методов или атрибутов, но служит основой для всех других классов фигур.
  2. Класс Circle наследует от Shape. Он использует свой метод area() для вычисления площади круга. Мы также видим, что конструктор класса Circle вызывает конструктор базового класса с помощью super().\_\_init\_\_().
  3. Класс Rectangle также наследует от Shape. Он содержит метод для вычисления площади прямоугольника.
  4. Класс Square — это подкласс Rectangle, который использует свойства прямоугольника для вычисления площади квадрата. Квадрат является частным случаем прямоугольника, поэтому его стороны равны.

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

В следующих уроках мы продолжим развивать иерархию классов и увидим, как ИИ может использовать этот подход для решения более сложных задач.