Полиморфизм в Python с ПРИМЕРАМИ

⚡ Умное резюме

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

  • 🔘 Определение: Полиморфизм означает «множество форм», позволяющее одному интерфейсу взаимодействовать с различными типами или классами данных.
  • ☑️ OperaПерегрузка Tor: Оператор + складывает числа, но объединяет строки, демонстрируя полиморфизм операторов.
  • Встроенные функции: Функции, такие как len(), работают как со строками, так и со списками и словарями.
  • 🧪 Методы, определяемые пользователем: Классы могут использовать одни и те же имена методов, например, area() и perimeter(), для разных фигур.
  • 🇧🇷 Наследование: Переопределение методов позволяет дочернему классу переопределять метод родительского класса во время выполнения.
  • 🤖 Актуальность ИИ: Библиотеки машинного обучения повторно используют общие интерфейсы, такие как fit() и forward(), в разных моделях.

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

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

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

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

Оператор в Python помогает выполнять математические и некоторые другие задачи программирования. Например, оператор '+' помогает выполнять сложение между двумя целыми типами в Python, и таким же образом, этот же оператор помогает в конкатенации строк в Python программирование.

Возьмем пример + (плюс) оператора в Python чтобы отобразить применение полиморфизма в Python как показано ниже:

Python Code:

p = 55
q = 77
r = 9.5
g1 = "Guru"
g2 = "99!"
print("the sum of two numbers",p + q)
print("the data type of result is",type(p + q))
print("The sum of two numbers",q + r)
print("the data type of result is", type (q + r))
print("The concatenated string is", g1 + g2)
print("The data type of two strings",type(g1 + g2))

Выход:

the sum of two numbers 132
the data type of result is <class 'int'>

The sum of the two numbers 86.5
the data type of result is <class 'float'>

The concatenated string is Guru99!
The data type of two strings <class 'str'>

Приведенный выше пример также можно рассматривать как пример перегрузки операторов.

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

Пользовательский метод в Python Язык программирования — это методы, которые создает пользователь, и он объявляется с использованием ключевого слова def вместе с именем функции.

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

Давайте возьмем следующий пример, как показано ниже: –

Python Code:

from math
import pi
class square:
    def __init__(self, length):
    self.l = length
def perimeter(self):
    return 4 * (self.l)
def area(self):
    return self.l * self.l
class Circle:
    def __init__(self, radius):
    self.r = radius
def perimeter(self):
    return 2 * pi * self.r
def area(self):
    return pi * self.r * * 2
# Initialize the classes
sqr = square(10)
c1 = Circle(4)
print("Perimeter computed for square: ", sqr.perimeter())
print("Area computed for square: ", sqr.area())
print("Perimeter computed for Circle: ", c1.perimeter())
print("Area computed for Circle: ", c1.area())

Выход:

Perimeter computed for square:  40
Area computed for square:  100
Perimeter computed for Circle:  25.132741228718345
Area computed for Circle:  50.26548245743669

В приведенном выше коде есть два определяемых пользователем метода: периметр и площадь, определенные в классах круга и квадрата.

Как показано выше, и класс круга, и класс квадрата вызывают одно и то же имя метода, отображающее характеристику полиморфизма для получения требуемого результата.

Полиморфизм в функциях

Встроенные функции в Python разработаны и сделаны совместимыми для выполнения нескольких типов данных. В PythonФункция `len()` — одна из ключевых встроенных функций.

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

На следующем рисунке показано, как полиморфизм может быть применен в Python по отношению к встроенным функциям: –

Полиморфизм в функциях

Следующая программа помогает проиллюстрировать применение полиморфизма в Python: -

Python Code:

print ("The length of string Guru99 is ",len("Guru99"))
print("The length of list is ",len(["Guru99","Example","Reader"]))
print("The length of dictionary is ",len({"Website name":"Guru99","Type":"Education"}))

Выход:

The length of string Guru99 is 6
The length of the list is 3
The length of the dictionary is 2

Полиморфизм в функциях

В приведенном выше примере функция len() Python выполняет полиморфизм для типов данных строк, списков и словарей соответственно.

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

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

Есть два ключевых Python концепции, называемые переопределением методов и перегрузкой методов.

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

Давайте возьмем следующий пример полиморфизма и наследования, как показано ниже: –

Python Code:

class baseclass:
    def __init__(self, name):
    self.name = name
def area1(self):
    pass
def __str__(self):
    return self.name
class rectangle(baseclass):
    def __init__(self, length, breadth):
    super().__init__("rectangle")
self.length = length
self.breadth = breadth
def area1(self):
    return self.length * self.breadth
class triangle(baseclass):
    def __init__(self, height, base):
    super().__init__("triangle")
self.height = height
self.base = base
def area1(self):
    return (self.base * self.height) / 2
a = rectangle(90, 80)
b = triangle(77, 64)
print("The shape is: ", b)
print("The area of shape is", b.area1())
print("The shape is:", a)
print("The area of shape is", a.area1())

Выход:

The shape is: a triangle
The area of a shape is 2464.0

The shape is: a rectangle
The area of a shape is 7200

В приведенном выше коде методы имеют те же имена, что и метод init и метод area1. Объект класса Square и Прямоугольник затем используется для вызова двух методов для выполнения различных задач и предоставления вывода площади квадрата и прямоугольника.

Полиморфизм с методами класса

Python программирование позволяет программистам достигать полиморфизма и перегрузки методов методами класса. Различные классы в Python могут иметь методы, объявленные с одним и тем же именем во всем Python код.

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

Следующий пример иллюстрирует концепцию полиморфизма с методами класса: –

Python Code:

class amazon:
    def __init__(self, name, price):
    self.name = name
self.price = price
def info(self):
    print("This is product and am class is invoked. The name is {self.name}. This costs {self.price} rupees.")
class flipkart:
    def __init__(self, name, price):
    self.name = name
self.price = price
def info(self):
    print(f "This is product and fli class is invoked. The name is {self.name}. This costs {self.price} rupees.")
FLP = flipkart("Iphone", 2.5)
AMZ = amazon("Iphone", 4)
for product1 in (FLP, AMZ):
    product1.info()

Выход:

This is a product, and fli class is invoked. The name is iPhone, and this costs 2.5 rupees.
This is a product, and am class is invoked. The name is iPhone, and this costs 4 rupees.

В приведенном выше коде два разных класса, названные Flipkart и Amazon, используют одни и те же имена методов info и init для предоставления соответствующих ценовых предложений продукта и дальнейшей иллюстрации концепции полиморфизма в Python.

Разница между перегрузкой метода и полиморфизмом времени компиляции

В полиморфизме времени компиляции компилятор Python программа разрешает вызов. Полиморфизм времени компиляции достигается посредством перегрузки методов.

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

Часто задаваемые вопросы (FAQ)

Уткаping Давайте Python Оценивайте объект по предоставляемым им методам, а не по типу класса. Если у объекта есть необходимый метод, он работает, следуя принципу «если он ходит как утка и крякает как утка, значит, это утка».

Традиционно это не так. Если два метода имеют одинаковое название, то побеждает последнее определение. Python Вместо этого имитируется перегрузка с использованием аргументов по умолчанию, аргументов переменной длины (*args) или декоратора functools.singledispatch для обработки различных типов аргументов в рамках одной функции.

AbstracБазовые классы из модуля abc объявляют методы, которые должен реализовывать каждый подкласс. Они обеспечивают общий интерфейс, поэтому несвязанные подклассы могут использоваться полиморфно, в то время как Python гарантирует, что каждый из них предоставляет необходимые методы.

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

Да. Через утиный галстук.pingНесвязанные классы, реализующие один и тот же метод, могут использоваться взаимозаменяемо без общего родительского класса. OperaПерегрузка Tor и встроенные функции, такие как len(), также обеспечивают полиморфизм без наследования.

Полиморфизм проявляется, когда одна функция обрабатывает строки, списки или пользовательские объекты, в драйверах баз данных, предоставляющих единый API для всех движков, и в графических инструментах, где многие виджеты используют общие методы draw() или update(), вызываемые через один интерфейс.

Фреймворки искусственного интеллекта основаны на полиморфизме. В PythonTorВ ch каждая модель наследует класс nn.Module и переопределяет метод forward(); в scikit-learn оценщики используют общие методы fit() и predict(), поэтому разные алгоритмы работают через один согласованный, взаимозаменяемый интерфейс.

Да. GitHub Copilot и агентные ИИ-помощники генерируют функции с утиной типизацией и предлагают абсолютные значения.tracна основе базовых классов переформулируйте повторяющиеся методы в полиморфные конструкции, используя короткий запрос. RevПросмотрите выходные данные, чтобы убедиться в правильности логики и интерфейсов.

Подведем итог этой публикации следующим образом: