Polymorfisme in Python met VOORBEELDEN

โšก Slimme samenvatting

Polymorfisme in Python Hiermee kan รฉรฉn interface werken met objecten van verschillende typen, zodat dezelfde methode of operator zich anders gedraagt โ€‹โ€‹afhankelijk van het object. Dit komt tot uiting in operatoroverloading, ingebouwde functies, door de gebruiker gedefinieerde methoden en overerving. Python 's.

  • ๐Ÿ”˜ Definitie: Polymorfisme betekent "vele vormen", waardoor รฉรฉn interface op verschillende gegevenstypen of klassen kan werken.
  • โ˜‘๏ธ OperaTor-overbelasting: De operator + telt getallen op, maar voegt tegelijkertijd tekenreeksen samen, wat operatorpolymorfisme aantoont.
  • โœ… Ingebouwde functies: Functies zoals len() werken op strings, lijsten en woordenboeken.
  • ๐Ÿงช Door de gebruiker gedefinieerde methoden: Klassen kunnen methodenamen zoals area() en perimeter() delen voor verschillende vormen.
  • ๏ธ Erfenis: Method overriding stelt een afgeleide klasse in staat om een โ€‹โ€‹methode van de ouderklasse tijdens de uitvoering te herdefiniรซren.
  • ๐Ÿค– Relevantie van AI: Machine learning-bibliotheken hergebruiken gedeelde interfaces zoals fit() en forward() voor verschillende modellen.

Polymorfisme in Python

Wat is polymorfisme?

Polymorfisme kan worden gedefinieerd als een aandoening die in veel verschillende vormen voorkomt. Het is een concept in Python programmeren waarin een object is gedefinieerd in Python kan op verschillende manieren gebruikt worden. Hiermee kan de programmeur meerdere methoden definiรซren in een afgeleide klasse, en deze heeft dezelfde naam als aanwezig in de bovenliggende klasse. Dergelijke scenario's ondersteunen overbelasting van methoden Python.

Polymorfisme in Operaverdraaid

Een operator in Python helpt bij het uitvoeren van wiskundige en verschillende andere programmeertaken. De operator '+' helpt bijvoorbeeld bij het uitvoeren van optellingen tussen twee gehele getallen in Python, en op dezelfde manier helpt dezelfde operator bij het samenvoegen van strings in Python programmering.

Laten we een voorbeeld nemen van + (plus) operator in Python om een โ€‹โ€‹toepassing van polymorfisme weer te geven Python zoals hieronder aangegeven:

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

Output:

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

Het bovenstaande voorbeeld kan ook worden beschouwd als een voorbeeld van operatoroverbelasting.

Polymorfisme in door de gebruiker gedefinieerde methoden

Een door de gebruiker gedefinieerde methode in de Python programmeertaal zijn methoden die de gebruiker maakt, en deze wordt gedeclareerd met behulp van het trefwoord def met de functienaam.

Polymorfisme in de Python programmeertaal wordt bereikt door overbelasting en overschrijving van methoden. Python definieert methoden met het trefwoord def en met dezelfde naam in zowel de onderliggende als de bovenliggende klasse.

Laten we het volgende voorbeeld nemen, zoals hieronder weergegeven: โ€“

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

Output:

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

In de bovenstaande code zijn er twee door de gebruiker gedefinieerde methoden, omtrek en oppervlakte, gedefinieerd in cirkel- en vierkante klassen.

Zoals hierboven weergegeven, roepen zowel de cirkelklasse als de vierkante klasse dezelfde methodenaam aan, die het kenmerk van polymorfisme weergeeft om de vereiste uitvoer te leveren.

Polymorfisme in functies

De ingebouwde functies in Python zijn ontworpen en compatibel gemaakt om verschillende gegevenstypen uit te voeren. In Pythonlen() is een van de belangrijkste ingebouwde functies.

Het werkt met verschillende gegevenstypen: lijst, tuple, string en dictionary. De functie len() retourneert specifieke informatie die is afgestemd op deze vele gegevenstypen.

De volgende afbeelding laat zien hoe polymorfisme kan worden toegepast in Python met betrekking tot ingebouwde functies: โ€“

Polymorfisme in functies

Het volgende programma helpt bij het illustreren van de toepassing van polymorfisme in 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"}))

Output:

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

Polymorfisme in functies

In het bovenstaande voorbeeld wordt de functie len() van Python voert polymorfisme uit voor respectievelijk string-, lijst- en woordenboekgegevenstypen.

Polymorfisme en erfelijkheid

Erfenis binnen Python kan worden gedefinieerd als het programmeerconcept waarbij een gedefinieerde onderliggende klasse eigenschappen overerft van een andere basisklasse die aanwezig is Python.

Er zijn twee sleutels Python concepten die 'methode-overriding' en 'methode-overbelasting' worden genoemd.

  • Bij overbelasting van de methode, Python biedt de mogelijkheid om methoden te creรซren die dezelfde naam hebben om verschillende functionaliteiten in een bepaald stuk code uit te voeren of uit te voeren. Het maakt het mogelijk om methoden te overbelasten en gebruikt ze om verschillende taken in eenvoudiger bewoordingen uit te voeren.
  • Bij Methode overschrijven, Python overschrijft de waarde die een vergelijkbare naam heeft in de bovenliggende en onderliggende klassen.

Laten we het volgende voorbeeld van polymorfisme en overerving nemen, zoals hieronder weergegeven: โ€“

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

Output:

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

In bovenstaande code hebben de methoden dezelfde naam, gedefinieerd als de init-methode en de area1-methode. Het object van de klassen vierkant en rechthoek wordt vervolgens gebruikt om de twee methoden aan te roepen om verschillende taken uit te voeren en de uitvoer van de oppervlakte van vierkant en rechthoek te leveren.

Polymorfisme met de klassenmethoden

De Python Door te programmeren kunnen programmeurs polymorfisme en methode-overbelasting met klassenmethoden bereiken. De verschillende klassen binnen Python kan methoden hebben die overal in dezelfde naam worden gedeclareerd Python code.

In Python, kunnen twee verschillende klassen worden gedefinieerd. De ene zou een kindklasse zijn en deze ontleent attributen aan een andere gedefinieerde klasse die de ouderklasse wordt genoemd.

Het volgende voorbeeld illustreert het concept van polymorfisme met klassemethoden: โ€“

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

Output:

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.

In de bovenstaande code gebruiken twee verschillende klassen, genaamd Flipkart en Amazon, dezelfde methodenamen info en init om respectievelijke prijsopgaven van het product te verstrekken en het concept van polymorfisme verder te illustreren. Python.

Verschil tussen overbelasting van methoden en polymorfisme tijdens het compileren

In compile-time Polymorphism is de compiler van de Python programma lost de oproep op. Compile-time polymorfisme wordt bereikt door overbelasting van methoden.

De Python compiler lost de oproepen voor polymorfisme tijdens runtime niet op. Het wordt ook geclassificeerd als methode-overriding waarbij dezelfde methoden vergelijkbare handtekeningen of eigenschappen hebben, maar deel uitmaken van verschillende klassen.

Veelgestelde vragen

Eend typing laat Python Beoordeel een object op basis van de methoden die het biedt, in plaats van op basis van het klassetype. Als een object de vereiste methode heeft, werkt het, volgens het principe "als het eruitziet als een eend en kwaakt als een eend, dan is het een eend".

Traditioneel gezien niet. Wanneer twee methoden dezelfde naam hebben, is de laatstgenoemde definitie doorslaggevend. Python In plaats daarvan simuleert het overbelasting door gebruik te maken van standaardargumenten, *args met variabele lengte of de functools.singledispatch-decorator om verschillende argumenttypen binnen รฉรฉn functie af te handelen.

AbstracDe basisklassen uit de module abc declareren methoden die elke subklasse moet implementeren. Ze dwingen een gedeelde interface af, zodat niet-gerelateerde subklassen polymorfisch gebruikt kunnen worden. Python garandeert dat elk van hen de vereiste methoden biedt.

Polymorfisme verbetert de herbruikbaarheid, flexibiliteit en schaalbaarheid van code. Eรฉn functie of interface kan meerdere objecttypen verwerken, wat duplicatie vermindert, onderhoud vereenvoudigt en het mogelijk maakt om nieuwe klassen toe te voegen zonder de code die ze al gebruikt te hoeven herschrijven.

Ja. Via eend typingNiet-gerelateerde klassen die dezelfde methode implementeren, kunnen door elkaar gebruikt worden zonder dat er een gemeenschappelijke ouderklasse is. OperaTor-overloading en ingebouwde functies zoals len() bieden ook polymorfisme zonder overerving.

Polymorfisme treedt op wanneer een functie tekenreeksen, lijsten of aangepaste objecten verwerkt, in databasestuurprogramma's die รฉรฉn API beschikbaar stellen voor verschillende database-engines, en in GUI-toolkits waar veel widgets draw()- of update()-methoden delen die via รฉรฉn interface worden aangeroepen.

AI-frameworks zijn afhankelijk van polymorfisme. In PyTorElk model erft van nn.Module en overschrijft de forward()-methode. In scikit-learn delen estimators de fit()- en predict()-methoden, waardoor verschillende algoritmen via รฉรฉn consistente, uitwisselbare interface werken.

Ja. GitHub Copilot en AI-assistenten genereren functies met duck-typering en suggereren abs.tract basisklassen, en herstructureer herhaalde methoden naar polymorfe ontwerpen op basis van een korte aanwijzing. RevBekijk de uitvoer om te bevestigen dat de logica en interfaces correct zijn.

Vat dit bericht samen met: