Polymorfism i Python med EXEMPEL

โšก Smart sammanfattning

Polymorfism i Python lรฅter ett enda grรคnssnitt arbeta med objekt av olika typer, sรฅ att samma metod eller operator beter sig olika beroende pรฅ objektet. Det visar sig genom operatorรถverbelastning, inbyggda funktioner, anvรคndardefinierade metoder och arv รถver Python program.

  • ๐Ÿ”˜ Definition: Polymorfism betyder "mรฅnga former", vilket lรฅter ett grรคnssnitt agera pรฅ olika datatyper eller klasser.
  • โ˜‘๏ธ Operator-รถverbelastning: Operatorn + adderar tal men sammanfogar strรคngar, vilket visar operatorpolymorfism.
  • โœ… Inbyggda funktioner: Funktioner som len() fungerar pรฅ bรฅde strรคngar, listor och ordbรถcker.
  • ๐Ÿงช Anvรคndardefinierade metoder: Klasser kan dela metodnamn som area() och perimeter() fรถr olika former.
  • ๐Ÿ› ๏ธ Arv: Metodรถverstyrning lรฅter en underklass omdefiniera en fรถrรคldermetod vid kรถrning.
  • ๐Ÿค– AI-relevans: Maskininlรคrningsbibliotek รฅteranvรคnder delade grรคnssnitt som fit() och forward() mellan modeller.

Polymorfism i Python

Vad รคr polymorfism?

Polymorfism kan definieras som ett tillstรฅnd som fรถrekommer i mรฅnga olika former. Det รคr ett koncept i Python programmering dรคr ett objekt definierat i Python kan anvรคndas pรฅ olika sรคtt. Det tillรฅter programmeraren att definiera flera metoder i en hรคrledd klass, och den har samma namn som finns i den รถverordnade klassen. Sรฅdana scenarier stรถder metodรถverbelastning Python.

Polymorfism i Operatorer

En operatรถr i Python hjรคlper till att utfรถra matematiska och flera andra programmeringsuppgifter. Till exempel, "+"-operatorn hjรคlper till att utfรถra addition mellan tvรฅ heltalstyper i Python, och pรฅ samma sรคtt hjรคlper samma operatรถr till med att sammanfoga strรคngar Python programmering.

Lรฅt oss ta ett exempel pรฅ + (plus) Operatรถr i Python fรถr att visa en tillรคmpning av polymorfism i Python enligt nedanstรฅende:

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

Produktion:

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

Ovanstรฅende exempel kan ocksรฅ betraktas som exemplet pรฅ operatรถrens รถverbelastning.

Polymorfism i anvรคndardefinierade metoder

En anvรคndardefinierad metod i Python programmeringssprรฅk รคr metoder som anvรคndaren skapar, och det deklareras med hjรคlp av nyckelordet def med funktionsnamnet.

Polymorfism i Python programmeringssprรฅk uppnรฅs genom metodรถverbelastning och รฅsidosรคttande. Python definierar metoder med nyckelord def och med samma namn i bรฅde barn- och fรถrรคlderklass.

Lรฅt oss ta fรถljande exempel som visas nedan: โ€“

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

Produktion:

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

I ovanstรฅende kod finns det tvรฅ anvรคndardefinierade metoder, perimeter och area, definierade i cirkel- och kvadratklasser.

Som visas ovan anropar bรฅde cirkelklass och kvadratklass samma metodnamn som visar egenskaperna hos polymorfism fรถr att leverera den รถnskade utdata.

Polymorfism i funktioner

Den inbyggda fungerar i Python รคr designade och kompatibla fรถr att kรถra flera datatyper. I Python, len() รคr en av de viktigaste inbyggda funktionerna.

Den fungerar med flera datatyper: lista, tupel, strรคng och ordbok. Funktionen len() returnerar bestรคmd information i linje med dessa mรฅnga datatyper.

Fรถljande figur visar hur polymorfism kan tillรคmpas i Python med relation till inbyggda funktioner: โ€“

Polymorfism i funktioner

Fรถljande program hjรคlper till att illustrera tillรคmpningen av polymorfism 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"}))

Produktion:

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

Polymorfism i funktioner

I exemplet ovan รคr len()-funktionen fรถr Python utfรถr polymorfism fรถr strรคng-, list- och ordboksdatatyper.

Polymorfism och arv

Arv i Python kan definieras som programmeringskonceptet dรคr en definierad barnklass รคrver egenskaper frรฅn en annan basklass som finns i Python.

Det finns tvรฅ nyckel Python begrepp som kallas metodรถverskridande och metodรถverbelastning.

  • Vid metodรถverbelastning, Python ger funktionen att skapa metoder som har samma namn fรถr att utfรถra eller exekvera olika funktioner i en given kod. Det gรถr det mรถjligt att รถverbelasta metoder och anvรคnder dem fรถr att utfรถra olika uppgifter i enklare termer.
  • I metod รฅsidosรคttande, Python รฅsidosรคtter vรคrdet som delar ett liknande namn i fรถrรคldra- och barnklasser.

Lรฅt oss ta fรถljande exempel pรฅ polymorfism och arv som visas nedan: -

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

Produktion:

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 ovanstรฅende kod har metoderna samma namn definierade som init-metod och area1-metod. Objektet fรถr klassen kvadrat och rektangel anvรคnds sedan fรถr att anropa de tvรฅ metoderna fรถr att utfรถra olika uppgifter och tillhandahรฅlla utdata fรถr arean av kvadrat och rektangel.

Polymorfism med klassmetoderna

Ocuco-landskapet Python programmering gรถr det mรถjligt fรถr programmerare att uppnรฅ polymorfism och metodรถverbelastning med klassmetoder. De olika klasserna i Python kan ha metoder som deklareras i samma namn รถver hela Python koda.

In Python, tvรฅ olika klasser kan definieras. En skulle vara barnklass, och den hรคrleder attribut frรฅn en annan definierad klass som kallas fรถrรคlderklass.

Fรถljande exempel illustrerar begreppet polymorfism med klassmetoder: -

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

Produktion:

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 ovanstรฅende kod anvรคnder tvรฅ olika klasser som heter flipkart och amazon samma metodnamn info och init fรถr att tillhandahรฅlla respektive prisuppgift fรถr produkten och ytterligare illustrera konceptet polymorfism i Python.

Skillnad mellan metodรถverbelastning och kompileringstidspolymorfism

I kompileringstiden Polymorphism, kompilatorn av Python programmet lรถser samtalet. Kompileringstidspolymorfism รฅstadkoms genom metodรถverbelastning.

Ocuco-landskapet Python kompilatorn lรถser inte anropen under kรถrningstid fรถr polymorfism. Det klassificeras ocksรฅ som metodรถverskridande dรคr samma metoder har liknande signaturer eller egenskaper, men de utgรถr en del av olika klasser.

Vanliga frรฅgor

Anka typing lรฅter Python bedรถma ett objekt utifrรฅn de metoder det tillhandahรฅller snarare รคn dess klasstyp. Om ett objekt har den erforderliga metoden fungerar det enligt idรฉn "om det gรฅr som en anka och kvackar som en anka, รคr det en anka".

Inte traditionellt. Nรคr tvรฅ metoder delar samma namn vinner den sista definitionen. Python simulerar istรคllet รถverbelastning med hjรคlp av standardargument, *args med variabel lรคngd eller dekoratorn functools.singledispatch fรถr att hantera olika argumenttyper inom en enda funktion.

Abstract-basklasser, frรฅn abc-modulen, deklarerar metoder som varje underklass mรฅste implementera. De framtvingar ett delat grรคnssnitt, sรฅ orelaterade underklasser kan anvรคndas polymorfiskt medan Python garanterar att var och en tillhandahรฅller de metoder som krรคvs.

Polymorfism fรถrbรคttrar kodens รฅteranvรคndbarhet, flexibilitet och skalbarhet. En funktion eller ett grรคnssnitt kan bearbeta mรฅnga objekttyper, vilket minskar dubbelarbete, fรถrenklar underhรฅll och lรฅter dig lรคgga till nya klasser utan att skriva om koden som redan anvรคnder dem.

Ja. Genom Anka Typing, orelaterade klasser som implementerar samma metod kan anvรคndas omvรคxlande utan nรฅgon delad fรถrรคlder. Operator-รถverbelastning och inbyggda funktioner som len() ger ocksรฅ polymorfism utan arv.

Polymorfism uppstรฅr nรคr en funktion bearbetar strรคngar, listor eller anpassade objekt, i databasdrivrutiner som exponerar ett enda API รถver olika motorer, och i GUI-verktygslรฅdor dรคr mรฅnga widgetar delar draw()- eller update()-metoder som anropas via ett grรคnssnitt.

AI-ramverk รคr beroende av polymorfism. I PyTorch, varje modellunderklass nn.Module och overrides forward(); i scikit-learn delar estimatorer fit()- och predict()-metoder, sรฅ olika algoritmer kรถrs genom ett konsekvent, utbytbart grรคnssnitt.

Ja. GitHub Copilot och agentic AI-assistenter genererar duck-typade funktioner, fรถreslรฅr abstract-basklasser och omfaktorera upprepade metoder till polymorfa designer frรฅn en kort prompt. RevVisa utdata fรถr att bekrรคfta att logiken och grรคnssnitten รคr korrekta.

Sammanfatta detta inlรคgg med: