Python

Полиморфизм в Python

Полиморфизм в Python
Полиморфизм означает «много форм.”Полиморфизм - важная особенность объектно-ориентированного программирования (ООП).  Когда один и тот же метод объявляется несколько раз, для разных целей и в разных классах, это называется полиморфизмом. Еще одна особенность ООП: наследование, посредством которого дочерний класс может быть создан путем наследования функций родительского класса. Иногда от программиста требуется объявить одноименный метод как в родительском, так и в дочернем классах для различных целей. Этот тип задач также может быть реализован с помощью полиморфизма. В этой статье объясняется, как можно определить полиморфизм в объектно-ориентированном программировании (ООП).

Пример 1: полиморфизм с функциями и объектами

Следующий скрипт показывает использование полиморфизма между двумя разными классами. Функция используется для создания объекта этих классов. Значение переменной с именем цвет инициализируется в __в этом__() метод как 'Попугай'и'Страус'классы во время создания объекта. В Особенности() Метод определен в обоих классах, но вывод метода для каждого класса немного отличается. В Create_Object () функция используется для создания объекта класса. Эта функция выполняется дважды, чтобы создать объект в 'Попугай"класс и в"Страус' класс. Каждый вызовет метод features () обоих классов и распечатает результат.

#!/ usr / bin / env python3
# Определить класс Parrot
класс Parrot ():
def __init __ (я, цвет):
себя.color = цвет
функции def (self):
print ("Цвет Попугая% s"% self.цвет)
print («Попугай умеет летать»)
# Определить класс Ostrich
класс Страус ():
def __init __ (я, цвет):
себя.color = цвет
функции def (self):
print ("Цвет Страуса% s"% self.цвет)
print («Страус не умеет летать»)
# Определить функцию для вызова метода класса
def Create_Object (объект):
Объект.Особенности()
# Создать объект класса Parrot
Create_Object (Попугай ('Зеленый'))
# Создать объект класса Страус
Create_Object (Страус ('Черно-белый'))

Выход

Следующий вывод показывает, что объект 'Попугай'класс создан с помощью'Зеленый'как цвет значение. Функция печатает вывод, вызывая Особенности() метод 'Попугай' класс. Далее, объект 'Страус'класс создан с помощью'Черное и белое'как цвет значение. Функция печатает вывод, вызывая Особенности() метод 'Страус' класс.

Пример 2: Полиморфизм в методах несвязанного класса

Как и в предыдущем примере, следующий скрипт показывает использование полиморфизма в двух разных классах, но никакая пользовательская функция не используется для объявления объекта. В __в этом__() метод как 'Менеджер' а также 'Клерк'классы инициализируют необходимые переменные. Полиморфизм здесь реализован путем создания post_details () а также оплата труда() методы внутри обоих классов. Содержание этих методов различно для каждого из этих классов. Затем для обоих классов создаются объектные переменные, которые повторяются с помощью для цикл. На каждой итерации post_details () а также оплата труда() методы вызываются для печати вывода.

#!/ usr / bin / env python3
# Определить класс с именем Manager
Менеджер класса:
def __init __ (я, имя, отдел):
себя.name = имя
себя.post = 'Менеджер'
себя.отдел = отдел
# Определить функцию для установки деталей
def post_details (сам):
если я.отделение.upper () == 'HR':
себя.базовый = 30000
еще:
себя.базовый = 25000
себя.houseRent = 10000
себя.транспорт = 5000
print ("Сообщение% s% s"% (self.имя, я.Почта))
# Определить функцию для расчета зарплаты
def зарплата (самостоятельно):
зарплата = себе.базовый + самостоятельный.аренда дома + самообслуживание.транспорт
вернуть зарплату
# Определить класс с именем Clerk
классный клерк:
def __init __ (я, имя):
себя.name = имя
себя.post = 'Клерк'
# Определить функцию для установки деталей
def post_details (сам):
себя.базовый = 10000
себя.транспорт = 2000
print ("Сообщение% s% s"% (self.имя, я.Почта))
# Определить функцию для расчета зарплаты
def зарплата (самостоятельно):
зарплата = себе.базовый + самостоятельный.транспорт
вернуть зарплату
# Создаем объекты для классов
manager = Менеджер ("Кабир", "час")
clerk = Клерк ("Робин")
# Вызов одних и тех же функций из разных классов
для obj в (менеджер, клерк):
объект.post_details ()
print ("Зарплата есть", obj.оплата труда())

Выход

Следующий вывод показывает, что объект 'Ясли'класс используется в первой итерации для петля и зарплата менеджера печатается после расчета. Объект 'Клерк'используется во второй итерации для петля и зарплата клерка печатается после расчета.

Пример 3: Полиморфизм в методах родственного класса

Следующий скрипт показывает использование полиморфизма между двумя дочерними классами. Здесь оба 'Треугольник' а также 'Круг'являются дочерними классами родительского класса с именем'Геометрический_Форма.'Согласно наследованию, дочерний класс может получить доступ ко всем переменным и методам родительского класса. В __в этом__() метод 'Геометрический_Форма'класс используется в обоих дочерних классах для инициализации переменной название используя супер() метод. Ценности база а также высота принадлежащий 'Треугольник'класс будет инициализирован во время создания объекта. Таким же образом значения радиуса 'Круг'класс будет инициализирован во время создания объекта. Формула для вычисления площади треугольника: ½ × база × высота, который реализован в область() метод 'Треугольник' класс. Формула для вычисления площади круга: 3.14 × (радиус)2, который реализован в область() метод 'Круг' класс. Названия обоих методов здесь одинаковы, но цель разная. Затем у пользователя будет получено строковое значение для создания объекта и вызова метода на основе значения. Если пользователь вводит "треугольник", то объект "Треугольник' будет создан класс, и если пользователь наберет «круг», то объект 'Круг' класс будет создан. Если пользователь вводит любой текст без треугольника или круга, объект не будет создан, и будет напечатано сообщение об ошибке.

#!/ usr / bin / env python3
# Определить родительский класс
класс Geometric_Shape:
def __init __ (я, имя):
себя.name = имя
# Определить дочерний класс для вычисления площади треугольника
класс Треугольник (Geometric_Shape):
def __init __ (я, имя, база, высота):
супер().__init __ (имя)
себя.base = base
себя.height = высота
область определения (self):
результат = 0.5 * самостоятельно.база * сам.высота
print ("\ nПлощадь% s =% 5.2f "% (себя.имя, результат))
# Определить дочерний класс для вычисления площади круга
класс Circle (Geometric_Shape):
def __init __ (я, имя, радиус):
супер().__init __ (имя)
себя.radius = радиус
область определения (self):
результат = 3.14 * самостоятельно.радиус ** 2
print ("\ nПлощадь% s =% 5.2f "% (себя.имя, результат))
cal_area = input ("Какую площадь вы хотите вычислить? треугольник / круг \ n ")
если cal_area.upper () == 'ТРЕУГОЛЬНИК':
base = float (input ('Введите основание треугольника:'))
height = float (input ('Введите высоту треугольника:'))
obj = Треугольник ('Треугольник', основание, высота)
объект.область()
elif cal_area.upper () == 'КРУГ':
radius = float (input ('Введите радиус круга:'))
obj = Круг ('Круг', радиус)
объект.область()
еще:
print («Неправильный ввод»)

Выход

В следующем выводе скрипт выполняется дважды. Первый раз, треугольник принимается в качестве входных данных, и объект инициализируется тремя значениями, 'Треугольник', база, а также высота. Эти значения затем используются для вычисления площади треугольника, и результат будет распечатан. Второй раз, круг принимается в качестве входных данных, и объект инициализируется двумя значениями, 'Круг' а также радиус. Эти значения затем используются для вычисления площади круга, и результат будет распечатан.

Заключение

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

Установите последнюю версию игры OpenRA Strategy в Ubuntu Linux
OpenRA - это игровой движок Libre / Free Real Time Strategy, воссоздающий ранние игры Westwood, такие как классическая Command & Conquer: Red Alert. Р...
Установите последнюю версию эмулятора Dolphin для Gamecube и Wii в Linux
Эмулятор Dolphin позволяет вам играть в выбранные вами игры Gamecube и Wii на персональных компьютерах (ПК) Linux. Являясь свободно доступным игровым...
Как использовать чит-движок GameConqueror в Linux
В статье содержится руководство по использованию чит-движка GameConqueror в Linux. Многие пользователи, играющие в игры на Windows, часто используют п...