English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Основные уроки Python

Управление потоком в Python

Функции в Python

Типы данных Python

Операции с файлами в Python

Объекты и классы в Python

Даты и время в Python

Продвинутые знания Python

Руководство по Python

Многообразие в Python

В этом руководстве мы будем изучать полиморфизм, различные типы полиморфизма и как их демонстрировать с помощью примеров в Python.

Что такое полиморфизм?

Лiteralно, полиморфизм означает условия,出现的不同形式.

Полиморфизм - это важное concepto в программировании. Это означает использование единого типа сущности (метода, оператора или объекта) для представления различных сценариев с различными типами.

Давайте приведем пример:

Пример 1: полиморфизм оператора сложения

Мы знаем, что оператор + широко используется в программах на Python. Однако, у него нет единственного использования.

Для типа данных целых чисел используется оператор + для выполнения арифметического сложения.

num1 = 1
num2 = 2
print(num1+num2)

Таким образом, вывод программы выше: 3

Аналогично, для типа данных строка, используется оператор + для их объединения.

str1 = "Python"
str2 = "Programming"
print(str1+" "+str2)

Результат, вывод программы выше: : Программирование на Python

Здесь мы можем увидеть, что оператор + выполняет различные действия с различными типами данных. Это один из самых простых примеров полиморфизма в Python.

Полиморфизм функций в Python

В Python есть функции, которые兼容 с множеством типов данных.

Одной из таких функций является функция len(). Она может работать с многими типами данных в Python. Давайте посмотрим на несколько примеров использования этой функции.

Пример 2: полиморфизм функции len()

print(len("w3codebox"))
print(len(["Python", "Java", "C"]))
print(len({"Name": "John", "Address": "Nepal"}))

Результат вывода

5
3
2

Здесь мы можем увидеть, что многие типы данных (например, строки, списки, кортежи, множества и словари) могут использовать функцию len(). Однако, мы можем увидеть, что она возвращает специфическую информацию о конкретном типе данных.

Полиморфизм функции len() в Python

Полиморфизм классов в Python

Полиморфизм - это非常重要的 концепция в面向 объектном программировании.

Чтобы узнать больше о OOP в Python, пожалуйста, посетите:Объектно-ориентированное программирование на Python

При создании методов класса мы можем использовать концепцию полиморфизма, так как Python позволяет различным классам иметь методы с одинаковыми именами.

Затем мы можем обобщить вызовы этих методов, позже игнорируя используемый объект. Давайте рассмотрим пример:

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

class Cat:
    def __init__(self, name, age):
        self.name = name
        self.age = age
    def info(self):
        print(f"Я кошка. Мое имя {self.name}. Мне {self.age} лет.")
    def make_sound(self):
        print("Meow")
class Dog:
    def __init__(self, name, age):
        self.name = name
        self.age = age
    def info(self):
        print(f"Я собака. Мое имя {self.name}. Мне {self.age} лет.")
    def make_sound(self):
        print("Bark")
cat1 = Cat("Kitty", 2.5)
dog1 = Dog("Fluffy", 4)
for animal in (cat1, dog1):
    animal.make_sound()
    animal.info()
    animal.make_sound()

Результат вывода

Meow
Я кошка. Мое имя Kitty. Мне 2.5 года.
Meow
Bark
Я собака. Мое имя Fluffy. Мне 4 года.
Bark

Здесь мы создали два класса Cat и Dog. У них схожая структура и они имеют одинаковые имена методов info() и make_sound().

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

Полиморфизм и наследование

Как и в других языках программирования, в Python подкласс также наследует методы и свойства от родительского класса. Мы можем专门 redefine некоторые методы и свойства для подкласса, что называетсяMethod Overriding(Переопределение методов).

Полиморфизм позволяет нам доступ к этим переопределенным методам и свойствам, имеющим такое же имя, как и в родительском классе.

Давайте рассмотрим пример:

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

from math import pi
class Shape:
    def __init__(self, name):
        self.name = name
    def area(self):
        pass
    def fact(self):
        return "Я двумерная форма."
    def __str__(self):
        return self.name
class Square(Shape):
    def __init__(self, length):
        super().__init__("Square")
        self.length = length
    def area(self):
        return self.length ** 2
    def fact(self):
        return "Каждый угол квадрата составляет 90 градусов."
class Circle(Shape):
    def __init__(self, radius):
        super().__init__("Circle")
        self.radius = radius
    def area(self):
        return pi * self.radius ** 2
a = Square(4)
b = Circle(7)
print(b)
print(b.fact())
print(a.fact())
print(b.area())

Результат вывода

Circle
Я двумерная форма.
Каждый угол квадрата составляет 90 градусов.
153.93804002589985

Здесь мы видим, что в родительском классе используются методы, такие как __str__(), которые не были перезаписаны в подклассе.

Благодаря полиморфизму, интерпретатор Python автоматически определяет, что метод fact() объекта a (класс Square) был перезаписан. Он использует тот, который определен в подклассе.

С другой стороны, так как метод fact() объекта b не был перезаписан, его можно использовать из класса Parent Shape.

Многообразие в родительских и дочерних классах Python

Внимание:Перегрузка методовЭто метод, который не может создать метод с тем же именем, но с różnymi parametrami, в Python.