Treci la conținutul principal

Literal, „polimorfism” înseamnă „multe forme”. În programare, termenul descrie metode, funcții sau operatori care au același nume, dar pot rula pe multe obiecte sau clase diferite.


Polimorfismul funcțiilor

Funcția încorporată len() este un bun exemplu în Python, deoarece funcționează pe obiecte de tipuri diferite.

Exemplu

Pentru un șir, len() numără caracterele:

Prompt
Scrie un program Python care folosește len() pe șirul "Hello World!" și afișează rezultatul.
Ieșire: program Python complet

Exemplu

Pentru un tuplu, len() numără elementele:

Prompt
Scrie un program Python care folosește len() pe un tuplu cu trei fructe și afișează rezultatul.
Ieșire: program Python complet

Exemplu

Pentru un dicționar, len() numără perechile cheie/valoare:

Prompt
Scrie un program Python care folosește len() pe un dicționar cu cheile brand, model și year și afișează rezultatul.
Ieșire: program Python complet

Polimorfismul claselor

Metodele claselor sunt un loc frecvent pentru polimorfism: mai multe clase pot defini fiecare o metodă cu același nume.

Să presupunem că fiecare dintre clasele Car, Boat și Plane are propria metodă move():

Observă bucla for de la sfârșitul codului. Polimorfismul este cel care îi permite să execute aceeași metodă pe obiecte din toate cele trei clase.

Exemplu

Trei clase care au același nume de metodă:

Prompt
Scrie trei clase Python Car, Boat și Plane, fiecare cu o metodă move() care afișează acțiuni diferite. Creează obiecte și parcurge-le într-o buclă, apelând move().
Ieșire: program Python complet

Polimorfismul claselor prin moștenire

Funcționează asta și cu clase copil care au același nume de metodă? Da.

Ia clasele de mai sus și adaugă o clasă părinte, Vehicle, cu Car, Boat și Plane drept clase copil. Fiecare clasă copil primește metodele din Vehicle și le poate suprascrie:

O clasă copil preia proprietățile și metodele părintelui ei.

Uită-te la Car din exemplu: are corpul gol, dar primește totuși brand, model și move() de la Vehicle.

Și Boat și Plane primesc aceiași trei membri de la Vehicle, dar fiecare înlocuiește move() cu propria suprascriere.

Datorită polimorfismului, un singur apel de metodă funcționează pentru toate aceste clase.

Exemplu

Adaugă o clasă părinte numită Vehicle și derivă din ea Car, Boat și Plane:

Prompt
Scrie o clasă părinte Vehicle cu o metodă move() și clasele copil Car, Boat, Plane, unde Boat și Plane suprascriu move(). Parcurge obiectele într-o buclă, afișând brand, model și apelând move().
Ieșire: program Python complet