Image Image Image Image Image Image Image Image Image Image
Scroll to top

Top

#20 Наследование в объектно-ориентированном программировании Python ООП

Alex Rennie

Описание класса ElectricCar существенно сократилось за счёт использования наследования. Однажды разработав функционал, мы можем просто его наследовать. Вы можете использовать функции issubclass() или isinstance() для проверки отношений двух классов и экземпляров. В идеале вы должны создавать свои классы в отдельном модуле. Затем импортировать их в основной модуль программы с помощью import SomeClass.

  • По мере расширения ваших проектов и пакетов Python вы неизбежно захотите использовать классы и т.о.
  • Но чтобы не дублировать функционал одного класса в другом, в данном случае лучше применить наследование.
  • В этом разделе мы выполнили краткий обзор инструментов python, реализующих парадигму объектно-ориентированного программирования.
  • Если определен только метод __repr__, то он будет вызываться в функции print вместо метода __str__.
  • Однако в классе Triangle есть новый метод findArea() для вычисления и вывода на экран площади треугольника.

В Python эта ситуация решается алгоритмом Method Resolution Order (MRO), он определяет как производится поиск метода в классе и всех базовых классах. Порядок методов вычисляется в момент определения класса и сохраняется в поле ооп в python класса __mro__. За счёт этого мы не описывали заново методы __init__ и draw_picture и они работают так же, как и в базовом классе. Интерпретатор при вызове метода или атрибута сначала ищет их в текущем производном классе.

Добавить свойства

В Python наследование реализуется довольно просто и интуитивно. В этой статье мы разберем основы наследования в Python на примерах. В этом разделе мы выполнили краткий обзор инструментов python, реализующих парадигму объектно-ориентированного https://deveducation.com/ программирования. С точки зрения поддерживаемости super() может быть полезен даже при одиночном наследовании. Таким образом, использование super() позволит всем изменениям пройти через изменение в операторе класса.
наследование классов python
Класс NonDecreasingCounter добавляет дополнительный атрибут non_decreasing и изменяет поведение метода dec, чтобы контролировать, может ли счетчик уменьшаться. Это демонстрирует, как можно расширить и настроить поведение классов при наследовании. Реализация полиморфизма в python сильно отличается от его реализации в C++. Полиморфизм в C++ реализуется с помощью инструментов наследования и шаблонов.

Введение в super()

Функция isinstance() вернет True, если объект является экземпляром класса, или производных от родительского класса. В приведенном примере, возможно вы уже обратили внимание, что метод __init__() так же был определен и в классе Triangle(). Когда мы определяем тот же метод в классе наследнике, то происходит переопределение метода.
наследование классов python
Здесь мы видим, что, хотя мы не определили методы типа inputSides() или dispSides() для класса Triangle отдельно, мы смогли их использовать. Классы наследники объявляются так, как и родительские классы. Только, список наследуемых классов, указан после имени класса.

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

Давайте сразу перейдем к коду для демонстрации и лучшего понимания. Разумеется, если в каком-либо дочернем классе убрать

метод draw(), например, в

Тест на понимание классов

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

При использовании функции super() вам не нужно использовать имя родительского элемента, он автоматически унаследует методы и свойства от своего родителя. Итак, мы создали дочерний класс, который наследует свойства и методы своего родителя. Выполняется как переопределенная версия метода метода eat() в дочернем классе, так и версия метода eat() родительского класса.

Встроенные атрибуты класса

Если их нет в текущем классе, происходит поиск в базовом классе. Если и в базовом их нет, происходит поиск в вышестоящем базовом классе (в базовом классе для текущего базового класса). И так далее, пока метод или атрибут не будет найден в одном из базовых классов. Здесь мы используем labrador (объект класса Dog) для доступа к name и eat() класса Animal. Это возможно потому, что дочерний класс наследует все атрибуты и методы родительского класса.
наследование классов python
При наследовании дочерний класс получает свойства и может получить доступ ко всем элементам данных и функциям, определенным в родительском классе. Дочерний класс также может предоставлять свою конкретную реализацию функциям родительского класса. В этом разделе руководства мы подробно обсудим основы наследования в Python. Честно говоря, super() в данном случае дает нам мало преимуществ, если вообще хоть что-то дает. В зависимости от имени нашего родительского класса мы можем сэкономить несколько нажатий клавиш, и нам не нужно передавать self вызову __init__.

Comments