Polimorfismul în Python cu EXEMPLE

⚡ Rezumat inteligent

Polimorfismul în Python permite unei singure interfețe să lucreze cu obiecte de tipuri diferite, astfel încât aceeași metodă sau același operator se comportă diferit în funcție de obiect. Apare prin supraîncărcarea operatorilor, funcții încorporate, metode definite de utilizator și moștenire între Python programe.

  • 🔘 Definiție: Polimorfismul înseamnă „mai multe forme”, permițând unei singure interfețe să acționeze asupra diferitelor tipuri sau clase de date.
  • ☑️ Operasupraîncărcarea torului: Operatorul + adună numere, dar concatenează șiruri de caractere, demonstrând polimorfismul operatorilor.
  • Funcții încorporate: Funcții precum len() lucrează atât cu șiruri de caractere, cât și cu liste și dicționare.
  • 🧪 Metode definite de utilizator: Clasele pot partaja nume de metode precum area() și perimeter() pentru diferite forme.
  • 🛠️ Moştenire: Suprascrierea metodelor permite unei clase fiu să redefinească o metodă părinte în timpul execuției.
  • 🤖 Relevanță pentru inteligența artificială: Bibliotecile de învățare automată reutilizează interfețe partajate precum fit() și forward() în mai multe modele.

Polimorfismul în Python

Ce este polimorfismul?

Polimorfismul poate fi definit ca o condiție care apare sub multe forme diferite. Este un concept în Python programare în care un obiect definit în Python poate fi folosit în moduri diferite. Permite programatorului să definească mai multe metode într-o clasă derivată și are același nume cu cel prezent în clasa părinte. Astfel de scenarii acceptă supraîncărcarea metodei în Python.

Polimorfismul în Operatori

Un operator în Python ajută la efectuarea sarcinilor matematice și a altor câteva sarcini de programare. De exemplu, operatorul „+” ajută la efectuarea adunării între două tipuri de întregi în Python, și în același mod, același operator ajută la concatenarea șirurilor în Python programare.

Să luăm un exemplu de + (plus) operator în Python pentru a afișa o aplicație a polimorfismului în Python după cum se arată mai jos:

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))

ieșire:

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'>

Exemplul de mai sus poate fi privit și ca exemplu de supraîncărcare a operatorului.

Polimorfismul în metode definite de utilizator

O metodă definită de utilizator în Python limbajele de programare sunt metode pe care utilizatorul le creează și este declarat folosind cuvântul cheie def cu numele funcției.

Polimorfismul în Python limbajul de programare se realizează prin supraîncărcarea și suprascrierea metodei. Python definește metode cu cuvântul cheie def și cu același nume atât în ​​clasa copil, cât și în clasa părinte.

Să luăm următorul exemplu, așa cum se arată mai jos: -

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())

ieșire:

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

În codul de mai sus, există două metode definite de utilizator, perimetru și zonă, definite în clase cerc și pătrat.

După cum se arată mai sus, atât clasa cerc cât și clasa pătrată invocă același nume de metodă afișând caracteristica Polimorfismului pentru a furniza rezultatul necesar.

Polimorfismul în funcții

Funcțiile încorporate în Python sunt proiectate și făcute compatibile pentru a executa mai multe tipuri de date. În Python, len() este una dintre funcțiile cheie încorporate.

Funcționează cu mai multe tipuri de date: listă, tuplu, șir de caractere și dicționar. Funcția len() returnează informații definite aliniate cu aceste numeroase tipuri de date.

Figura următoare arată cum poate fi aplicat polimorfismul Python în legătură cu funcțiile încorporate: –

Polimorfismul în funcții

Următorul program ajută la ilustrarea aplicării polimorfismului în 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"}))

ieșire:

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

Polimorfismul în funcții

În exemplul de mai sus, funcția len() a Python efectuează Polimorfism pentru tipurile de date șir, listă și, respectiv, dicționar.

Polimorfismul și moștenirea

Moștenirea în Python poate fi definit ca conceptul de programare în care o clasă copil definită moștenește proprietăți de la o altă clasă de bază prezentă în Python.

Există două chei Python concepte numite suprascriere metodei și supraîncărcare a metodei.

  • În supraîncărcarea metodei, Python oferă caracteristica de a crea metode care au același nume pentru a efectua sau executa diferite funcționalități într-o anumită bucată de cod. Permite supraîncărcarea metodelor și le folosește pentru a efectua diferite sarcini în termeni mai simpli.
  • În anularea metodei, Python înlocuiește valoarea care împărtășește un nume similar în clasele părinte și copil.

Să luăm următorul exemplu de polimorfism și moștenire, așa cum se arată mai jos:

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())

ieșire:

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

În codul de mai sus, metodele au același nume definit ca metoda init și metoda area1. Obiectul clasei pătrat și dreptunghi sunt apoi folosite pentru a invoca cele două metode pentru a efectua sarcini diferite și pentru a furniza rezultatul ariei pătratului și dreptunghiului.

Polimorfismul cu metodele de clasă

Python programarea permite programatorilor să obțină polimorfismul și supraîncărcarea metodelor cu metode de clasă. Diferitele clase din Python poate avea metode care sunt declarate cu același nume în întreaga Python cod.

In Python, se pot defini două clase diferite. Una ar fi clasa copil și derivă atribute dintr-o altă clasă definită denumită clasă părinte.

Următorul exemplu ilustrează conceptul de polimorfism cu metode de clasă: –

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()

ieșire:

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.

În codul de mai sus, două clase diferite denumite flipkart și amazon folosesc aceleași metode denume info și init pentru a oferi cotații de preț respective ale produsului și pentru a ilustra în continuare conceptul de polimorfism în Python.

Diferența dintre supraîncărcarea metodei și polimorfismul în timp de compilare

În Polymorphism în timp de compilare, compilatorul de Python programul rezolvă apelul. Polimorfismul în timp de compilare se realizează prin supraîncărcarea metodei.

Python compilatorul nu rezolvă apelurile în timpul rulării pentru polimorfism. Este, de asemenea, clasificată ca suprascriere a metodei, în care aceleași metode poartă semnături sau proprietăți similare, dar fac parte din clase diferite.

Întrebări frecvente

Rață typing permite Python judecați un obiect după metodele pe care le oferă, mai degrabă decât după tipul său de clasă. Dacă un obiect are metoda necesară, acesta funcționează, urmând ideea „dacă merge ca o rață și măcăie ca o rață, este o rață”.

Nu în mod tradițional. Când două metode au același nume, ultima definiție câștigă. Python în schimb, simulează supraîncărcarea folosind argumente implicite, *args de lungime variabilă sau decoratorul functools.singledispatch pentru a gestiona diferite tipuri de argumente în cadrul unei singure funcții.

AbstracClasele de bază t, din modulul abc, declară metode pe care fiecare subclasă trebuie să le implementeze. Acestea impun o interfață partajată, astfel încât subclasele fără legătură pot fi utilizate polimorfic în timp ce Python garantează că fiecare oferă metodele necesare.

Polimorfismul îmbunătățește reutilizabilitatea, flexibilitatea și scalabilitatea codului. O funcție sau interfață poate procesa mai multe tipuri de obiecte, ceea ce reduce duplicarea, simplifică întreținerea și vă permite să adăugați clase noi fără a rescrie codul care le folosește deja.

Da. Prin rață.ping, clasele fără legătură care implementează aceeași metodă pot fi utilizate interschimbabil fără a avea un părinte partajat. OperaSupraîncărcarea torilor și funcțiile încorporate, cum ar fi len(), oferă, de asemenea, polimorfism fără moștenire.

Polimorfismul apare atunci când o funcție procesează șiruri de caractere, liste sau obiecte personalizate, în driverele de baze de date care expun o singură API în mai multe motoare și în seturile de instrumente GUI unde multe widget-uri partajează metode draw() sau update() apelate printr-o singură interfață.

Framework-urile de inteligență artificială depind de polimorfism. În PyTorch, fiecare subclasă de model nn.Module și suprascrie forward(); în scikit-learn, estimatorii partajează metodele fit() și predict(), astfel încât diferiți algoritmi rulează printr-o interfață consistentă și interschimbabilă.

Da. GitHub Copilot și asistenții AI agențici generează funcții de tip rață, sugerează abstracclasele de bază t și refactorizarea metodelor repetate în designuri polimorfe dintr-un prompt scurt. RevVizualizați rezultatul pentru a confirma că logica și interfețele sunt corecte.

Rezumați această postare cu: