|
Python face mostenirea foarte usoara. Iti amintesti de clasa FormaGeometrica? Sa zicem ca am vrea sa definim o clasa noua, sa spunem un patrat, pe baza clasei precedente:
class Patrat(FormaGeometrica):
def __init__(self,x):
self.x = x
self.y = x
Dupa cum poti observa, numele clasei parinte a fost trecut intre paranteze dupa numele clasei copil. Aceasta inseamna ca noua clasa Patrat va contine toate proprietatile si metodele clasei FormaGeometrica. Singurul lucru pe care trebuie sa-l mai faci este sa redefinesti functia __init__, astfel incat latimea (x) si inaltimea(y) obiectului de tip Patrat sa fie egale.
Sa aplicam ce am invatat si sa cream o noua clasa, de aceasta data mostenita din Patrat:
class PatratDublu(Patrat):
def __init__(self,y):
self.x = 2 * y
self.y = y
def perimetrul(self):
return 2 * self.x + 3 * self.y
Aceasta clasa va reprezenta doua patrate lipite, ceea ce inseamna ca trebuie sa redefinim si functia ce calculeaza perimetrul. Ca exercitiu, incearca sa creezi o instanta a acestei clase.
Referinte si liste de obiecte
Operatorul de atribuire functioneaza diferit pentru obiecte. In cazul variabilelor scalare, daca scriem variabila2 = variabila1 inseamna ca variabila2 va prelua valoarea variabilei 1.
In cazul obiectelor, daca avem o atribuire instanta2 = instanta1, cele doua variabile vor reprezenta referinte catre acelasi obiect. Cu alte cuvinte, daca proprietatile obiectului instanta1 sunt modificate, aceasta modificare va fi vizibila si in instanta2.
In alte limbaje, astfel de atribuiri sunt efectuate cu ajutorul pointerilor, dar in python aceasta operatie se efectueaza transparent.
Aspectul final pe care il vom discuta se refera la dictionare de obiecte. Tinand minte ceea ce tocmai am invatat despre pointeri, putem atribui o instanta a unei clase unei intrari dintr-o lista sau dictionar. Aceasta permite gruparea mai multor obiecte sub un singur nume de lista sau dictionar. Iata un exemplu:
dictionary = {}
dictionary["Patrat dublu 1"] = PatratDublu(5)
dictionary["Dreptunghi lung"] = FormaGeometrica(600,45)
print dictionary["Dreptunghi lung"].aria()
dictionary["Patrat dublu 1"].seteazaAutor("Autor")
print dictionary["Patrat dublu 1"].autor
Dupa cum poti observa, pur si simplu am inlocuit numele de variabila din partea stanga cu un element din dictionar. Interesant, nu?
Cam atat despre clase si obiecte. In urmatorul tutorial vei putea citi despre module si utilizarea lor in Python.
|