Treci la conținutul principal

Moștenirea în Python

Prin moștenire, o clasă poate prelua toate metodele și proprietățile altei clase.

Clasa care le oferă este clasa părinte, numită uneori clasă de bază.

Clasa care le primește este clasa copil, cunoscută și ca clasă derivată.


Crearea unei clase părinte

O clasă părinte nu are nevoie de o sintaxă specială. O scrii ca pe orice altă clasă, iar orice clasă poate avea acest rol:

Exemplu

Person stochează proprietățile firstname și lastname și oferă o metodă printname:

Prompt
Scrie o clasă Python Person cu proprietățile firstname și lastname și o metodă printname. Creează un obiect Person și apelează printname.
Ieșire: program Python complet

Crearea unei clase copil

Ca să creezi o clasă copil, scrie numele părintelui între paranteze după numele noii clase, astfel încât funcționalitatea să fie preluată:

Notă: pass este ceea ce scrii atunci când clasa nu are nevoie de nimic propriu în afară de ce moștenește.

Drept rezultat, Student ajunge să aibă toate proprietățile și metodele pe care le are Person.

Exemplu

Student își ia proprietățile și metodele de la clasa Person:

Prompt
Scrie o clasă Python Student care moștenește de la Person folosind pass. Creează un obiect Student și apelează metoda moștenită printname.
Ieșire: program Python complet
main.py
class Student(Person):
  pass

Adăugarea funcției __init__()

Clasa noastră copil primește deocamdată pur și simplu totul de la părintele ei.

În continuare, înlocuiește cuvântul cheie pass cu o funcție __init__() proprie.

Notă: Python apelează singur __init__() de fiecare dată când clasa creează un obiect nou.

Există însă o capcană: o clasă copil cu propria __init__() nu mai moștenește versiunea părintelui.

Notă: Funcția __init__() a copilului o suprascrie pe cea pe care ar fi moștenit-o de la părinte.

Ca să recapeți comportamentul părintelui, apelează funcția __init__() a părintelui din interiorul celei a copilului:

Copilul are acum propria __init__() și păstrează în continuare ce oferă părintele, așa că este gata să-i adaugi funcționalitate nouă.

Exemplu

Prompt
Scrie o clasă copil Python Student care apelează init al clasei părinte Person folosind Person.init().
Ieșire: program Python complet
main.py
class Student(Person):
  def __init__(self, fname, lname):
    #add properties etc.

Folosirea funcției super()

Funcția încorporată super() este o altă cale de a ajunge la părinte dintr-o clasă copil:

Deoarece super() găsește părintele în locul tău, numele părintelui nu trebuie să apară niciodată în apel și tot ai acces la metodele și proprietățile lui.

Exemplu

Prompt
Scrie o clasă copil Python Student care folosește super().init() pentru a moșteni de la Person.
Ieșire: program Python complet

Adăugarea proprietăților

Un an de absolvire precum 2019 nu ar trebui scris direct în clasă. Ar trebui să fie o variabilă, transmisă clasei Student de fiecare dată când este creat un obiect student, iar pentru asta este nevoie de încă un parametru în __init__():

Exemplu

Adaugă un parametru year și furnizează valoarea potrivită la crearea fiecărui obiect:

Prompt
Scrie o clasă Python Student care moștenește de la Person și adaugă o proprietate graduationyear. Creează un Student cu anul 2019.
Ieșire: program Python complet

Adăugarea metodelor

Clasele copil pot avea metode proprii. Un lucru la care trebuie să fii atent: o metodă din clasa copil care are același nume ca o funcție din clasa părinte o suprascrie pe cea moștenită.

Exemplu

Dă clasei Student o metodă welcome:

Prompt
Scrie o clasă Python Student care moștenește de la Person, cu o metodă welcome care afișează un mesaj de bun venit cu graduationyear.
Ieșire: program Python complet