Polymorfisme i Python med EKSEMPLER

โšก Smart oppsummering

Polymorfisme i Python lar et enkelt grensesnitt fungere med objekter av forskjellige typer, slik at den samme metoden eller operatoren oppfรธrer seg forskjellig avhengig av objektet. Dette vises gjennom operatoroverbelastning, innebygde funksjoner, brukerdefinerte metoder og arv pรฅ tvers Python programmer.

  • ๐Ÿ”˜ Definisjon: Polymorfisme betyr ยซmange formerยป, รฅ la ett grensesnitt virke pรฅ forskjellige datatyper eller klasser.
  • โ˜‘๏ธ OperaTor-overbelastning: + -operatoren legger sammen tall, men sammenkobler strenger, noe som viser operatorpolymorfisme.
  • โœ… Innebygde funksjoner: Funksjoner som len() fungerer pรฅ bรฅde strenger, lister og ordbรธker.
  • ๐Ÿงช Brukerdefinerte metoder: Klasser kan dele metodenavn som area() og perimeter() for forskjellige former.
  • ๐Ÿ› ๏ธ Arv: Metodeoverstyring lar en barneklasse omdefinere en foreldremetode under kjรธretid.
  • ๐Ÿค– AI-relevans: Maskinlรฆringsbiblioteker gjenbruker delte grensesnitt som fit() og forward() pรฅ tvers av modeller.

Polymorfisme i Python

Hva er polymorfisme?

Polymorfisme kan defineres som en tilstand som forekommer i mange forskjellige former. Det er et konsept i Python programmering der et objekt er definert i Python kan brukes pรฅ forskjellige mรฅter. Den lar programmereren definere flere metoder i en avledet klasse, og den har samme navn som tilstede i den overordnede klassen. Slike scenarier stรธtter metodeoverbelastning inn Python.

Polymorfisme i Operatorer

En operatรธr i Python hjelper med รฅ utfรธre matematiske og flere andre programmeringsoppgaver. For eksempel hjelper '+'-operatoren med รฅ utfรธre addisjon mellom to heltallstyper i Python, og pรฅ samme mรฅte hjelper den samme operatรธren med รฅ sette sammen strenger Python programmering.

La oss ta et eksempel pรฅ + (pluss) operatรธr i Python for รฅ vise en anvendelse av polymorfisme i Python som vist nedenfor:

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

Utgang:

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

Eksempelet ovenfor kan ogsรฅ betraktes som eksempelet pรฅ operatรธroverbelastning.

Polymorfisme i brukerdefinerte metoder

En brukerdefinert metode i Python programmeringssprรฅk er metoder som brukeren oppretter, og det er deklarert ved hjelp av nรธkkelordet def med funksjonsnavnet.

Polymorfisme i Python programmeringssprรฅk oppnรฅs gjennom metodeoverbelastning og overstyring. Python definerer metoder med def nรธkkelord og med samme navn i bรฅde underordnet og overordnet klasse.

La oss ta fรธlgende eksempel som vist nedenfor: โ€“

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

Utgang:

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

I koden ovenfor er det to brukerdefinerte metoder, omkrets og areal, definert i sirkel- og kvadratklasser.

Som vist ovenfor, pรฅkaller bรฅde sirkelklasse og kvadratklasse det samme metodenavnet som viser egenskapene til polymorfisme for รฅ levere det nรธdvendige resultatet.

Polymorfisme i funksjoner

Den innebygde funksjoner i Python er designet og gjort kompatible for รฅ utfรธre flere datatyper. I Python, len() er en av de viktigste innebygde funksjonene.

Den fungerer pรฅ flere datatyper: liste, tuple, streng og ordbok. len()-funksjonen returnerer definert informasjon som er justert med disse mange datatypene.

Fรธlgende figur viser hvordan polymorfisme kan brukes i Python i forhold til innebygde funksjoner: โ€“

Polymorfisme i funksjoner

Fรธlgende program hjelper til med รฅ illustrere anvendelsen av polymorfisme i 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"}))

Utgang:

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

Polymorfisme i funksjoner

I eksemplet ovenfor er len()-funksjonen til Python utfรธrer polymorfisme for henholdsvis streng-, liste- og ordbokdatatyper.

Polymorfisme og arv

Arv i Python kan defineres som programmeringskonseptet der en barneklasse definert arver egenskaper fra en annen basisklasse som er tilstede i Python.

Det er to nรธkkel Python begreper kalt metodeoverstyring og metodeoverbelastning.

  • Ved metodeoverbelastning, Python gir funksjonen til รฅ lage metoder som har samme navn for รฅ utfรธre eller utfรธre forskjellige funksjoner i et gitt kodestykke. Det gjรธr det mulig รฅ overbelaste metoder og bruker dem til รฅ utfรธre forskjellige oppgaver i enklere termer.
  • I metodeoverstyring, Python overstyrer verdien som deler et lignende navn i foreldre- og barneklasser.

La oss ta fรธlgende eksempel pรฅ polymorfisme og arv som vist nedenfor: -

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

Utgang:

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

I koden ovenfor har metodene samme navn definert som init-metoden og area1-metoden. Objektet til klassen kvadrat og rektangel brukes deretter til รฅ pรฅkalle de to metodene for รฅ utfรธre forskjellige oppgaver og gi utdata fra arealet av kvadrat og rektangel.

Polymorfisme med klassemetodene

Ocuco Python programmering gjรธr det mulig for programmerere รฅ oppnรฅ polymorfisme og metodeoverbelastning med klassemetoder. De forskjellige klassene i Python kan ha metoder som er deklarert i samme navn pรฅ tvers av Python kode.

In Python, kan to forskjellige klasser defineres. Den ene ville vรฆre barneklasse, og den henter attributter fra en annen definert klasse kalt overordnet klasse.

Fรธlgende eksempel illustrerer konseptet polymorfisme med klassemetoder: -

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

Utgang:

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.

I koden ovenfor bruker to forskjellige klasser navngitt som flipkart og amazon de samme metodenavnene info og init for รฅ gi respektive pristilbud pรฅ produktet og ytterligere illustrere konseptet polymorfisme i Python.

Forskjellen mellom metodeoverbelastning og kompileringstidspolymorfisme

I kompileringstidspolymorfisme, kompilatoren av Python programmet lรธser samtalen. Kompileringstidspolymorfisme oppnรฅs gjennom metodeoverbelastning.

Ocuco Python kompilatoren lรธser ikke kallene i lรธpet av kjรธretiden for polymorfisme. Det er ogsรฅ klassifisert som metodeoverstyrende der de samme metodene har lignende signaturer eller egenskaper, men de utgjรธr en del av forskjellige klasser.

Spรธrsmรฅl og svar

Duck typing lar Python bedรธm et objekt etter metodene det tilbyr, snarere enn klassetypen. Hvis et objekt har den nรธdvendige metoden, fungerer det etter ideen ยซhvis det gรฅr som en and og kvakker som en and, er det en andยป.

Ikke tradisjonelt. Nรฅr to metoder deler samme navn, vinner den siste definisjonen. Python simulerer i stedet overbelastning ved hjelp av standardargumenter, *args med variabel lengde eller functools.singledispatch-dekoratoren for รฅ hรฅndtere forskjellige argumenttyper innenfor en enkelt funksjon.

Abstract-basisklasser, fra abc-modulen, deklarerer metoder som hver underklasse mรฅ implementere. De hรฅndhever et delt grensesnitt, slik at urelaterte underklasser kan brukes polymorfisk mens Python garanterer at hver enkelt tilbyr de nรธdvendige metodene.

Polymorfisme forbedrer gjenbrukbarhet, fleksibilitet og skalerbarhet av kode. ร‰n funksjon eller et grensesnitt kan behandle mange objekttyper, noe som reduserer duplisering, forenkler vedlikehold og lar deg legge til nye klasser uten รฅ skrive om koden som allerede bruker dem.

Ja. Gjennom Duck Typing, urelaterte klasser som implementerer samme metode kan brukes om hverandre uten noen delt forelder. Operator-overbelastning og innebygde funksjoner som len() gir ogsรฅ polymorfisme uten arv.

Polymorfisme oppstรฅr nรฅr รฉn funksjon behandler strenger, lister eller tilpassede objekter, i databasedrivere som eksponerer et enkelt API pรฅ tvers av motorer, og i GUI-verktรธysett der mange widgeter deler draw()- eller update()-metoder som kalles gjennom ett grensesnitt.

AI-rammeverk er avhengige av polymorfisme. I PyTorch, hver modellunderklasse nn.Module og overrides forward(); i scikit-learn deler estimatorer fit()- og predict()-metoder, slik at forskjellige algoritmer kjรธrer gjennom ett konsistent, utskiftbart grensesnitt.

Ja. GitHub Copilot og agentic AI-assistenter genererer duck-typede funksjoner, foreslรฅr abstract-basisklasser, og refaktorer gjentatte metoder til polymorfe design fra en kort prompt. RevSe utgangen for รฅ bekrefte at logikken og grensesnittene er riktige.

Oppsummer dette innlegget med: