Python 3
Machine Learning

PENTRU ELEVII DE LICEU

LECȚIA 18
PAG. 1 / 4
OOP - Moștenirea
Acasă >>> Lecții online

Introducere

În lumea reală, moștenirea este procesul prin care anumite caracteristici – fie fizice, fie comportamentale – se transmit de la o generație la alta. În programarea orientată pe obiecte, principiul este similar: o clasă nouă poate moșteni atribute și metode de la o clasă existentă, extinzându-i sau modificându-i comportamentul.

Această capacitate de a construi tipuri de date complexe prin reutilizarea unor structuri deja definite reduce redundanța, îmbunătățește claritatea și permite extinderea sistemelor software fără a rescrie codul existent.

Moștenirea este mecanismul prin care o clasă (numită subclasă sau clasă derivată) preia comportamente și proprietăți de la o altă clasă (numită superclasă sau clasă de bază). Subclasa poate adăuga noi comportamente sau poate redefini metodele moștenite.

Acest proces este natural și logic. Dacă ai o clasă Vehicul, poți construi din ea clase precum Masina, Motocicleta sau Camion, fiecare moștenind comportamente comune (pornire, oprire, afișare date, etc.) și adăugând particularități specifice.

Atenție, moștenirea nu este doar un instrument de reutilizare a codului – este și un mijloc de a reflecta relații logice din lumea reală. Ori de câte ori poți spune că „un tip de obiect este un caz particular al altuia”, ai un candidat pentru moștenire.

Primele noțiuni

În limbajul Python, o subclasă se definește specificând clasa părinte între paranteze la definirea clasei:

class subclasa(clasa_părinte)

Am menționat anterior clasa Vehicul, pe care o descriem acum mai jos:
Editor - exemplu_oop.py
       
Rezultatul în consolă done
Detalii. Obiectul m de tip Masina are acces la metoda porneste() chiar dacă aceasta a fost definită în clasa Vehicul. Asta pentru că Masina moștenește toate metodele publice ale clasei de bază.

Atributele se moștenesc la fel ca metodele

Tot ce este definit în clasa părinte – metode, variabile, constante – este moștenit în mod implicit. Inclusiv variabilele definite direct în clasă (nu doar în __init__) pot fi accesate:

class Animal:
    tip = "necunoscut"

class Pisica(Animal):
    pass

print(Pisica.tip) # necunoscut


Notă. Dacă în Pisica definești un nou tip, acesta îl va suprascrie pe cel moștenit. Aceasta este o formă de shadowing.

Poți verifica ierarhia unui obiect cu isinstance() și issubclass()

Python oferă funcții utile pentru a verifica relațiile de moștenire:
  • isinstance(obj, Clasa) verifică dacă obj este instanță a clasei sau a unei subclase.
  • issubclass(A, B) verifică dacă A moștenește (direct sau indirect) din B
Recomandare. Deși nu e recomandat să îți bazezi logica pe aceste teste (polimorfismul adevărat nu are nevoie să „verifice tipul”), ele sunt utile în unele situații, mai ales în debug sau validări stricte. Testați funcțiile!
Avansează la pagina următoare.
 home   list  LECȚII   perm_identity   arrow_upward