Поліморфізм в 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. Потім об’єкти класу square і rectangle використовуються для виклику двох методів для виконання різних завдань і надання виведення площі квадрата та прямокутника.

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

Команда 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 для обробки різних типів аргументів в одній функції.

AbstracБазові класи t з модуля abc оголошують методи, які має реалізовувати кожен підклас. Вони забезпечують спільний інтерфейс, тому непов'язані підкласи можна використовувати поліморфно, Python гарантує, що кожен з них надає необхідні методи.

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

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

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

Фреймворки штучного інтелекту залежать від поліморфізму. У PyTorch, кожна модель є підкласом nn.Module та перевизначає forward(); у scikit-learn оцінювачі спільно використовують методи fit() та predict(), тому різні алгоритми працюють через один узгоджений, взаємозамінний інтерфейс.

Так. GitHub Copilot та агентні ШІ-помічники генерують функції типу «качка», пропонують абсцеси.tracбазові класи t та рефакторинг повторюваних методів у поліморфні проекти з короткого запиту. RevПерегляньте вихід, щоб підтвердити правильність логіки та інтерфейсів.

Підсумуйте цей пост за допомогою: