Polimorfizam u Python s PRIMJERIMA

โšก Pametni saลพetak

Polimorfizam u Python omoguฤ‡uje jednom suฤelju rad s objektima razliฤitih tipova, tako da se ista metoda ili operator ponaลกa drugaฤije ovisno o objektu. To se pojavljuje kroz preoptereฤ‡enje operatora, ugraฤ‘ene funkcije, korisniฤki definirane metode i nasljeฤ‘ivanje na Python Programi.

  • ๐Ÿ”˜ Definicija: Polimorfizam znaฤi โ€žmnogo oblikaโ€œ, ลกto omoguฤ‡uje jednom suฤelju da djeluje na razliฤite tipove podataka ili klase.
  • โ˜‘๏ธ Operapreoptereฤ‡enje Tora: Operator + zbraja brojeve, ali spaja nizove, pokazujuฤ‡i polimorfizam operatora.
  • โœ… Ugraฤ‘ene funkcije: Funkcije poput len() rade podjednako na stringovima, listama i rjeฤnicima.
  • ๐Ÿงช Korisniฤki definirane metode: Klase mogu dijeliti nazive metoda poput area() i perimeter() za razliฤite oblike.
  • ๐Ÿ› ๏ธ nasljedstvo: Nadjaฤavanje metode omoguฤ‡uje podreฤ‘enoj klasi da redefinira roditeljsku metodu tijekom izvoฤ‘enja.
  • ๐Ÿค– Relevantnost umjetne inteligencije: Biblioteke strojnog uฤenja ponovno koriste dijeljena suฤelja poput fit() i forward() u razliฤitim modelima.

Polimorfizam u Python

ล to je polimorfizam?

Polimorfizam se moลพe definirati kao stanje koje se javlja u mnogo razliฤitih oblika. To je koncept u Python programiranje u kojem je objekt definiran u Python mogu se koristiti na razliฤite naฤine. Programeru omoguฤ‡uje definiranje viลกe metoda u izvedenoj klasi, a ima isto ime kao i u nadreฤ‘enoj klasi. Takvi scenariji podrลพavaju preoptereฤ‡enje metoda u Python.

Polimorfizam u Operaulagatelji

Operater u Python pomaลพe u obavljanju matematiฤkih i nekoliko drugih programskih zadataka. Na primjer, operator '+' pomaลพe u izvoฤ‘enju zbrajanja izmeฤ‘u dva tipa cijelih brojeva Python, a na isti naฤin, isti operator pomaลพe u ulanฤavanju nizova Python programiranje.

Uzmimo primjer + (plus) operater u Python za prikaz primjene polimorfizma u Python kao ลกto je prikazano u nastavku:

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

Izlaz:

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

Gore navedeni primjer takoฤ‘er se moลพe smatrati primjerom preoptereฤ‡enja operatora.

Polimorfizam u korisniฤki definiranim metodama

Korisniฤki definirana metoda u Python programski jezik su metode koje sam kreira, a deklarira se pomoฤ‡u kljuฤne rijeฤi def uz naziv funkcije.

Polimorfizam u Python programski jezik se postiลพe preoptereฤ‡enjem i nadjaฤavanjem metode. Python definira metode s kljuฤnom rijeฤi def i istim imenom u podreฤ‘enoj i nadreฤ‘enoj klasi.

Uzmimo sljedeฤ‡i primjer kao ลกto je prikazano u nastavku: โ€“

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

Izlaz:

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

U gornjem kodu postoje dvije korisniฤki definirane metode, opseg i povrลกina, definirane u klasama kruga i kvadrata.

Kao ลกto je gore prikazano, i klasa kruga i klasa kvadrata pozivaju se na isto ime metode prikazujuฤ‡i karakteristiku polimorfizma za isporuku traลพenog rezultata.

Polimorfizam u funkcijama

Ugraฤ‘ene funkcije u Python su dizajnirani i napravljeni kompatibilni za izvrลกavanje nekoliko vrsta podataka. U Python, len() je jedna od kljuฤnih ugraฤ‘enih funkcija.

Radi s nekoliko tipova podataka: popis, n-torka, niz znakova i rjeฤnik. Funkcija len() vraฤ‡a odreฤ‘ene informacije usklaฤ‘ene s tim mnogim tipovima podataka.

Sljedeฤ‡a slika pokazuje kako se polimorfizam moลพe primijeniti u Python u odnosu na ugraฤ‘ene funkcije: โ€“

Polimorfizam u funkcijama

Sljedeฤ‡i program pomaลพe u ilustriranju primjene polimorfizma u 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"}))

Izlaz:

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

Polimorfizam u funkcijama

U gornjem primjeru, funkcija len() od Python izvodi polimorfizam za tipove podataka niza, popisa i rjeฤnika.

Polimorfizam i nasljeฤ‘ivanje

Nasljedstvo u Python moลพe se definirati kao koncept programiranja u kojem definirana podreฤ‘ena klasa nasljeฤ‘uje svojstva od druge osnovne klase prisutne u Python.

Postoje dva kljuฤa Python koncepti koji se nazivaju nadjaฤavanje metode i preoptereฤ‡enje metode.

  • Kod preoptereฤ‡enja metode, Python pruลพa znaฤajku stvaranja metoda koje imaju isti naziv za izvoฤ‘enje ili izvrลกavanje razliฤitih funkcija u danom dijelu koda. Omoguฤ‡uje preoptereฤ‡enje metoda i koristi ih za obavljanje razliฤitih zadataka na jednostavniji naฤin.
  • U nadjaฤavanju metode, Python nadjaฤava vrijednost koja dijeli sliฤno ime u roditeljskim i podreฤ‘enim klasama.

Uzmimo sljedeฤ‡i primjer polimorfizma i nasljeฤ‘ivanja kao ลกto je prikazano u nastavku: โ€“

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

Izlaz:

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

U gornjem kodu, metode imaju isto ime definirano kao metoda init i metoda area1. Objekt klase kvadrat i pravokutnik zatim se koriste za pozivanje dviju metoda za izvoฤ‘enje razliฤitih zadataka i davanje izlaznih podataka povrลกine kvadrata i pravokutnika.

Polimorfizam s metodama klase

The Python programiranje omoguฤ‡uje programerima postizanje polimorfizma i preoptereฤ‡enja metoda metodama klase. Razliฤite klase u Python mogu imati metode koje su deklarirane pod istim imenom u cijelom Python kodirati.

In Python, mogu se definirati dvije razliฤite klase. Jedna bi bila klasa dijete i ona izvodi atribute iz druge definirane klase koja se naziva roditeljska klasa.

Sljedeฤ‡i primjer ilustrira koncept polimorfizma s metodama klase: โ€“

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

Izlaz:

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.

U gornjem kodu, dvije razliฤite klase nazvane kao flipkart i amazon koriste istu metodu naziva info i init za pruลพanje odgovarajuฤ‡ih kotacija cijena proizvoda i daljnju ilustraciju koncepta polimorfizma u Python.

Razlika izmeฤ‘u preoptereฤ‡enja metode i polimorfizma tijekom kompajliranja

U polimorfizmu vremena kompajliranja, prevodilac Python program rjeลกava poziv. Polimorfizam tijekom kompajliranja postiลพe se preoptereฤ‡enjem metode.

The Python prevodilac ne rjeลกava pozive tijekom vremena izvoฤ‘enja za polimorfizam. Takoฤ‘er se klasificira kao nadjaฤavanje metode pri ฤemu iste metode nose sliฤne potpise ili svojstva, ali ฤine dio razliฤitih klasa.

Pitanja i odgovori

Patka Typing omoguฤ‡uje Python Prosudite objekt prema metodama koje pruลพa, a ne prema tipu klase. Ako objekt ima potrebnu metodu, on radi, slijedeฤ‡i ideju โ€žako hoda kao patka i kvaฤe kao patka, onda je patkaโ€œ.

Ne tradicionalno. Kada dvije metode dijele ime, pobjeฤ‘uje zadnja definicija. Python umjesto toga simulira preoptereฤ‡enje koriลกtenjem zadanih argumenata, *argumenata promjenjive duljine ili dekoratora functools.singledispatch za rukovanje razliฤitim tipovima argumenata unutar jedne funkcije.

KormilartracOsnovne klase t, iz modula abc, deklariraju metode koje svaka podklasa mora implementirati. One nameฤ‡u zajedniฤko suฤelje, tako da se nepovezane podklase mogu koristiti polimorfno dok Python jamฤi da svaki od njih pruลพa potrebne metode.

Polimorfizam poboljลกava ponovnu upotrebu koda, fleksibilnost i skalabilnost. Jedna funkcija ili suฤelje moลพe obraditi mnogo tipova objekata, ลกto smanjuje dupliciranje, pojednostavljuje odrลพavanje i omoguฤ‡uje dodavanje novih klasa bez prepisivanja koda koji ih veฤ‡ koristi.

Da. Kroz paฤju pratnjuping, nepovezane klase koje implementiraju istu metodu mogu se koristiti naizmjeniฤno bez ikakvog zajedniฤkog roditelja. OperaPreoptereฤ‡enje Tor-a i ugraฤ‘ene funkcije poput len() takoฤ‘er pruลพaju polimorfizam bez nasljeฤ‘ivanja.

Polimorfizam se pojavljuje kada jedna funkcija obraฤ‘uje nizove znakova, popise ili prilagoฤ‘ene objekte, u upravljaฤkim programima baza podataka koji izlaลพu jedan API u viลกe mehanizama i u GUI alatima gdje mnogi widgeti dijele metode draw() ili update() koje se pozivaju putem jednog suฤelja.

AI okviri ovise o polimorfizmu. U Py-uTorch, svaki model podklasira nn.Module i nadjaฤava forward(); u scikit-learn, estimatori dijele metode fit() i predict(), tako da razliฤiti algoritmi rade kroz jedno konzistentno, zamjenjivo suฤelje.

Da. GitHub Copilot i agentski AI asistenti generiraju funkcije tipa patka, predlaลพu trbuลกne miลกiฤ‡e.tract osnovne klase i refaktoriranje ponovljenih metoda u polimorfne dizajne iz kratkog prompta. RevPogledajte izlaz kako biste potvrdili da su logika i suฤelja ispravni.

Saลพmite ovu objavu uz: