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

Наследование Питона

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

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

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

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

Наследование — мощная функция объектно-ориентированного программирования.

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

<час>

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

class BaseClass:
  Body of base class
class DerivedClass(BaseClass):
  Body of derived class

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

<час>

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

Чтобы продемонстрировать использование наследования, давайте рассмотрим пример.

Многоугольник – это замкнутая фигура, имеющая 3 и более сторон. Скажем, у нас есть класс с именем Polygon определяется следующим образом.

class Polygon:
    def __init__(self, no_of_sides):
        self.n = no_of_sides
        self.sides = [0 for i in range(no_of_sides)]

    def inputSides(self):
        self.sides = [float(input("Enter side "+str(i+1)+" : ")) for i in range(self.n)]

    def dispSides(self):
        for i in range(self.n):
            print("Side",i+1,"is",self.sides[i])

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

inputSides() метод принимает величину каждой стороны и dispSides() отображает эти длины сторон.

Треугольник – это многоугольник с 3 сторонами. Итак, мы можем создать класс с именем Triangle. который наследуется от Polygon . Это делает все атрибуты Polygon класс, доступный для Triangle класс.

Нам не нужно определять их снова (повторное использование кода). Треугольник можно определить следующим образом.

class Triangle(Polygon):
    def __init__(self):
        Polygon.__init__(self,3)

    def findArea(self):
        a, b, c = self.sides
        # calculate the semi-perimeter
        s = (a + b + c) / 2
        area = (s*(s-a)*(s-b)*(s-c)) ** 0.5
        print('The area of the triangle is %0.2f' %area)

Однако класс Triangle имеет новый метод findArea() найти и вывести площадь треугольника. Вот пример запуска.

>>> t = Triangle()

>>> t.inputSides()
Enter side 1 : 3
Enter side 2 : 5
Enter side 3 : 4

>>> t.dispSides()
Side 1 is 3.0
Side 2 is 5.0
Side 3 is 4.0

>>> t.findArea()
The area of the triangle is 6.00

Мы видим, что даже если мы не определяли такие методы, как inputSides() или dispSides() для класса Triangle по отдельности мы смогли их использовать.

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

<час>

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

Обратите внимание, что в приведенном выше примере __init__() метод был определен в обоих классах, Triangle а также Многоугольник . Когда это происходит, метод производного класса переопределяет метод базового класса. То есть __init__() в треугольнике получает предпочтение перед __init__ в многоугольнике .

Обычно при переопределении базового метода мы склонны расширять определение, а не просто заменять его. То же самое делается путем вызова метода базового класса из метода производного класса (вызов Polygon.__init__() из __init__() в Triangle ).

Лучшим вариантом было бы использовать встроенную функцию super() . Итак, super().__init__(3) эквивалентно Polygon.__init__(self,3) и является предпочтительным. Чтобы узнать больше о super() в Python, посетите функцию Python super().

Две встроенные функции isinstance() и issubclass() используются для проверки наследования.

Функция isinstance() возвращает True если объект является экземпляром класса или других производных от него классов. Каждый класс в Python наследуется от базового класса object. .

>>> isinstance(t,Triangle)
True

>>> isinstance(t,Polygon)
True

>>> isinstance(t,int)
False

>>> isinstance(t,object)
True

Точно так же issubclass() используется для проверки наследования классов.

>>> issubclass(Polygon,Triangle)
False

>>> issubclass(Triangle,Polygon)
True

>>> issubclass(bool,int)
True

Python

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