Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Industrial programming >> Python

Наследование в Python: концепции, синтаксис и практические примеры

Наследование в Python

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

Видео: Наследование в Python

Наследование в Python

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


Синтаксис наследования в Python

class BaseClass:
    # тело базового класса
class DerivedClass(BaseClass):
    # тело производного класса

В приведённом фрагменте DerivedClass наследует все публичные члены BaseClass. Добавлением новых методов или переопределением существующих производный класс может настраивать поведение, переиспользуя базовую реализацию.


Пример наследования в Python

Продемонстрируем наследование на практике. Допустим, у нас есть общий класс Polygon, хранящий число сторон и их длины:

class Polygon:
    def __init__(self, no_of_sides):
        self.n = no_of_sides
        self.sides = [0 for _ in range(no_of_sides)]
    def input_sides(self):
        self.sides = [float(input(f"Enter side {i+1} : ")) for i in range(self.n)]
    def display_sides(self):
        for i, side in enumerate(self.sides, 1):
            print(f"Side {i} is {side}")

Класс Polygon инкапсулирует общие атрибуты и методы для любого многоугольника. Triangle — конкретный многоугольник ровно с тремя сторонами, поэтому он может наследовать от Polygon без переопределения общей логики:

class Triangle(Polygon):
    def __init__(self):
        super().__init__(3)  # инициализировать базовый с 3 сторонами
    def find_area(self):
        a, b, c = self.sides
        s = (a + b + c) / 2
        area = (s * (s - a) * (s - b) * (s - c)) ** 0.5
        print(f"The area of the triangle is {area:.2f}")

Запуск следующего кода демонстрирует наследование в действии:

>>> t = Triangle()
>>> t.input_sides()
Enter side 1 : 3
Enter side 2 : 5
Enter side 3 : 4
>>> t.display_sides()
Side 1 is 3.0
Side 2 is 5.0
Side 3 is 4.0
>>> t.find_area()
The area of the triangle is 6.00

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

Если атрибут или метод не найден в дочернем классе, Python ищет в родительском, и этот поиск продолжается вверх по цепочке наследования при необходимости.


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

И Polygon, и Triangle определяют метод __init__. Реализация дочернего переопределяет родительскую, но может (и должна) расширять базовую логику, вызывая её явно. Использование super() — современный, предпочтительный подход:

class Triangle(Polygon):
    def __init__(self):
        super().__init__(3)  # вызывает Polygon.__init__

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

Python предоставляет isinstance() и issubclass() для интроспекции отношений наследования:

t = Triangle()
print(isinstance(t, Triangle))  # True
print(isinstance(t, Polygon))   # True
print(isinstance(t, int))       # False
print(isinstance(t, object))    # True
print(issubclass(Polygon, Triangle))  # False
print(issubclass(Triangle, Polygon))  # True
print(issubclass(bool, int))    # True

Эти утилиты необходимы для проверки типов и обеспечения соответствия объектов ожидаемым интерфейсам.

Подробнее о super() см. в документации Python super() function.

Python

  1. Освоение типов данных в Python: практическое руководство
  2. Мастерство операторов Python: Полное руководство
  3. Оператор pass в Python: практическое руководство
  4. Словари в Python: создание, манипуляции и продвинутые техники
  5. Пользовательские исключения в Python: практическое руководство
  6. Объектно-ориентированное программирование в Python: классы, наследование, инкапсуляция и полиморфизм
  7. Перегрузка операторов в Python: практическое руководство
  8. Декоратор @property в Python: чистые, обратно совместимые геттеры и сеттеры
  9. Понимание type() и isinstance() в Python: практические примеры
  10. Наследование в C#: базовые и производные классы, интерфейсы