• February

    22

    2022
  • 347
  • 0

Python наследование классов Документация по языку программирования Python

Поскольку .calculate_payroll() – это просто интерфейс к методу PayrollSystem.calculate_payroll(), нам не нужно реализовывать его в базовом классе Employee. В большинстве случаев вы захотите наследовать реализацию класса, но вам нужно реализовать несколько интерфейсов, чтобы ваши объекты могли использоваться в разных ситуациях. Результат показывает, что класс не может быть создан, поскольку он содержит абстрактный метод calculate_payroll(). Производные классы должны переопределять метод, чтобы разрешить создание объектов их типа. Хотя мы можем создать экземпляр объекта Employee, этот объект не может быть использован системой PayrollSystem. Чтобы соответствовать требованиям PayrollSystem, нам нужно преобразовать класс Employee, который в настоящее время является простым классом, в абстрактный класс.

наследование классов python

Диаграмма показывает проблему алмаза с текущим дизайном классов. TemporarySecretary использует множественное наследование для наследования от двух классов, которые в конечном итоге также наследуются от Employee. Это приводит к двум путям достижения базового класса Employee, чего нужно обязательно избегать в своих проектах. По сути, мы наследуете реализацию атрибутов id и name класса Employee в наших производных классах.

Python: Введение в ООП

Обратите внимание, что все еще нужно явно инициализировать политики заработной платы в конструкторах. Вы, наверное, видели, что инициализация Manager и Secretary идентичны. Кроме того, инициализации FactoryWorker и TemporarySecretary одинаковы. Модуль производительности реализует класс ProductivitySystem, а также связанные с ним роли. Классы реализуют интерфейс work(), требуемый системой, но они не получены от Employee.

Композиция – это слабо связанные отношения, которые часто не требуют, чтобы составной класс обладал знаниями о компоненте. Это обеспечивает лучшую адаптируемость к изменениям и позволяет приложениям вводить новые требования, не затрагивая существующий код. На диаграмме показаны отношения для определения Secretary и TemporarySecretary с использованием множественного наследования, но без проблемы с алмазом.

Наследование методов классов в pyton

Класс HourlyEmployee инициализируется с помощью id и name, переменных базового класса, плюс hours_worked и hour_rate, необходимые для расчета заработной платы. Метод .calculate_payroll() реализован путем возврата отработанных часов, умноженных на часовую ставку. В этом разделе мы начнем моделировать систему управления персоналом. В нашем примере будет продемонстрировано использование наследования и то, как производные классы могут обеспечить конкретную реализацию интерфейса базового класса.

наследование классов python

Сделали атрибут street2 необязательным, поскольку не все адреса будут иметь этот компонент. При обращении к методу или атрибуту класса Python использует MRO, чтобы найти его. MRO также используется super() для определения, какой метод или атрибут вызывать. Вы можете узнать больше о super() в статье Supercharge Your Classes With Python super(). Современные языки программирования разработаны с учетом этой базовой концепции. Они позволяют вам наследовать от одного класса, но вы можете реализовать несколько интерфейсов.

Python: Погружаясь в классы

Однако класс Employee может иметь те же атрибуты и методы, что и класс Person, так как работник – это человек. Так, в выше в классе Employee только добавляется метод
works, весь остальной код повторяет функционал класса Person. Но чтобы не дублировать функционал одного класса в другом, в данном случае лучше применить наследование. В вышеописанном примере создается объект класса Dog, получающий имя в конструкторе. Затем по очереди выполняются методы sleep (спать), play (играть) и bark (лаять), двое из которых были унаследованы. Способность лаять является уникальной особенностью собаки, поскольку не каждое животное или домашний питомец умеет это делать.

  • Следующий пример демонстрирует генерацию пустого класса с именем Example.
  • Класс
    WorkingStudent просто наследует функционал от двух классов Employee и Student.
  • Он также реализует классы политики для расчета заработной платы.
  • Чтобы избежать этой проблемы, используйте фабричный метод (Factory Method) для создания ваших объектов.
  • Он возвращает true, если первый класс является подклассом второго класса, и false в противном случае.
  • Это значит, что __init__() в Triangle становится предпочтительнее __init__() в Polygon.

Если мы просто обратимся к self.inc, то получим ссылку на новый метод, ведь мы его переопределили. Синтаксис для выполнения принципы ооп python множественного наследования приведен ниже. СodeСhick.io – простой и эффективный способ изучения программирования.

Множественное наследование

Метод makeNoise заставляет собаку лаять, выдавая соответствующее сообщение на экран. Для этого в функции print используется получение доступа к полям name и noise. Далее необходимо создать экземпляр класса Dog и вызвать на нем makeNoise.

наследование классов python

Как видите, множественное наследование может сбивать с толку, особенно когда вы сталкиваетесь с проблемой алмаза (diamond). Как видите, PayrollSystem по-прежнему может обрабатывать новый объект, поскольку он соответствует требуемому интерфейсу. Все эти требования выполняются классом DisgruntledEmployee, поэтому PayrollSystem все еще может рассчитать свою заработную плату.

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

Subclass() же используется для проверки, наследуется ли какой-либо класс от другого. Давайте погрузимся в мир наследования в Python на простых примерах. Наследование в Python считается одним из наиболее важных аспектов ООП, поскольку оно служит функции повторного использования, что делает часть кода более надежной. Следующий пример демонстрирует генерацию пустого класса с именем Example.

Шаг 1. Создайте базовый класс

Но что, если возникает необходимость наследовать свойства сразу от нескольких классов? В Python для этих целей существует механизм множественного наследования, который позволяет создавать подкласс на основе нескольких классов. Мы можем предоставить некоторую конкретную реализацию метода родительского класса в нашем дочернем классе. Когда метод родительского класса определен в дочернем классе с некоторой конкретной реализацией, эта концепция называется переопределением метода. Нам может потребоваться выполнить переопределение метода в сценарии, когда в дочернем классе требуется другое определение метода родительского класса. Наследование в Python – важный аспект объектно-ориентированной парадигмы.

LEAVE A COMMENT

You comment will be published within 24 hours.

Cancel reply

COST CALCULATOR

Use our form to estimate the initial cost of renovation or installation.

REQUEST A QUOTE
Latest Posts
Most Viewed
Text Widget

Here is a text widget settings ipsum lore tora dolor sit amet velum. Maecenas est velum, gravida Vehicula Dolor