LECȚIA 17
|
PAG. 3 / 4
|
Acasă >>>
Lecții online

Cum putem modifica totuși datele?
În programarea orientată pe obiecte, uneori dorim să expunem anumite atribute ale unei clase pentru a fi consultate sau modificate, dar fără a le oferi un acces complet și necontrolat. Este un echilibru fin: vrem să oferim transparență, dar și protecție. Python vine în întâmpinarea acestei nevoi cu un mecanism elegant: decoratoarele @property.Astfel, putem defini proprietăți care se comportă ca niște atribute normale, dar în realitate sunt în spatele lor metode — adică putem controla ce se întâmplă când cineva citește sau modifică acea valoare. Super interesant, nu?
Să revenim la exemplul nostru cu contul bancar. Avem un atribut __sold, declarat privat, tocmai pentru a preveni modificările brute și periculoase din afara clasei. Dar dacă vrem să permitem utilizatorului să consulte soldul contului, fără să expunem direct atributul? Și, mai mult, dacă vrem să permitem modificarea soldului, dar doar în condiții bine definite?
Aceasta este situația ideală pentru folosirea @property.
Vom rescrie acum clasa, apoi folosim corespunzător pentru a crea și utiliza un obiect: Deși sold pare un atribut simplu, el este de fapt o metodă îmbrăcată în haine de atribut. Acesta este farmecul lui @property: oferă interfața intuitivă a unui câmp public, dar cu controlul și protecția unei metode.
Putem evidenția unele avantaje:
- Ascundem detaliile interne ale stocării datelor (atributul real este de fapt __sold).
- Bineînțeles, putem adăuga validări și reguli în momentul în care cineva modifică valoarea.
- Nu e nevoie să schimbăm felul în care se accesează datele (nicio paranteză, nicio funcție vizibilă).
Pe scurt, getter (@property) oferă acces controlat la valoare, iar setter (@property.setter) controlează schimbarea acelei valori. Ambele împreună formează o interfață sigură și flexibilă pentru utilizatorii clasei.
Această tehnică este foarte frecvent întâlnită în biblioteci și framework-uri Python bine proiectate, pentru că permite evoluția clasei fără să spargă codul care o folosește. Practic, putem începe cu un atribut simplu, și când apare nevoia, îl putem transforma într-o proprietate — fără să modificăm apelurile din restul aplicației.
Observație. Pe lângă getter și setter, decoratorul @property poate avea și o componentă deleter, care controlează ce se întâmplă când cineva încearcă să șteargă un atribut al clasei prin del.
Avansează la pagina următoare.

home | list LECȚII | perm_identity | arrow_upward |