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

⚡ Умно обобщение

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

  • 🔘 Определение: Полиморфизмът означава „много форми“, позволявайки на един интерфейс да действа върху различни типове данни или класове.
  • ☑️ Operaпретоварване на тор: Операторът + събира числа, но същевременно конкатенира низове, показвайки полиморфизъм на операторите.
  • Вградени функции: Функции като len() работят еднакво с низове, списъци и речници.
  • 🧪 Потребителски дефинирани методи: Класовете могат да споделят имена на методи като area() и perimeter() за различни форми.
  • 🛠️ наследство: Пренаписването на метод позволява на дъщерен клас да предефинира родителски метод по време на изпълнение.
  • 🤖 Релевантност на ИИ: Библиотеките за машинно обучение използват повторно споделени интерфейси като fit() и forward() в различните модели.

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

Какво е полиморфизъм?

Полиморфизмът може да се определи като състояние, което се среща в много различни форми. Това е концепция в Python програмиране, при което обект, дефиниран в Python може да се използва по различни начини. Той позволява на програмиста да дефинира множество методи в производен клас и има същото име като присъстващото в родителския клас. Такива сценарии поддържат претоварване на метода в Python.

Полиморфизъм в Operaтори

Оператор в 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. След това обектът на клас квадрат и правоъгълник се използват за извикване на двата метода за изпълнение на различни задачи и предоставяне на изхода на площта на квадрат и правоъгълник.

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

- 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 компилаторът не разрешава извикванията по време на изпълнение за полиморфизъм. Той също така се класифицира като заместващ метод, при който едни и същи методи носят подобни сигнатури или свойства, но те са част от различни класове.

Въпроси и Отговори

Патешко тиping Нека да Python съдете за обекта по методите, които той предоставя, а не по типа му на клас. Ако даден обект има необходимия метод, той работи, следвайки идеята „ако ходи като патица и кряка като патица, той е патица“.

Не е традиционно. Когато два метода споделят едно и също име, последната дефиниция печели. Python вместо това симулира претоварване, използвайки аргументи по подразбиране, *args с променлива дължина или декоратора functools.singledispatch за обработка на различни типове аргументи в рамките на една функция.

Коремни мускулиtracБазовите класове от модула abc декларират методи, които всеки подклас трябва да имплементира. Те налагат споделен интерфейс, така че несвързани подкласове могат да се използват полиморфно, докато Python гарантира, че всеки от тях предоставя необходимите методи.

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

Да. Чрез патешкото „ти“.ping, несвързани класове, които имплементират един и същ метод, могат да се използват взаимозаменяемо без споделен родител. OperaПретоварването на tor и вградените функции като len() също осигуряват полиморфизъм без наследяване.

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

Рамките за изкуствен интелект зависят от полиморфизма. В PyTorch, всеки модел подкласира nn.Module и презаписва forward(); в scikit-learn, оценките споделят методите fit() и predict(), така че различните алгоритми се изпълняват през един последователен, взаимозаменяем интерфейс.

Да. GitHub Copilot и агентните AI асистенти генерират функции, тип „патешко“, предлагайки коремни мускули.tract базови класове и рефакториране на повтарящи се методи в полиморфни дизайни от кратка команда. RevПрегледайте изхода, за да потвърдите, че логиката и интерфейсите са правилни.

Обобщете тази публикация с: