28.01.2015 Views

Tutorial Python - Starship

Tutorial Python - Starship

Tutorial Python - Starship

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

de obiecte au metode. De exemplu, obiectele listă au metodele: append, insert, sort, etc. În cele ce urmează<br />

vom folosi termenul de metodă numai în sensul mai sus definit).<br />

Numele de metode disponibile pentru un anumit obiect depind de clasa din care face parte obiectul. Prin definiţie<br />

toate atributele de tip funcţie ale unei clase devin metode pentru toate instanţele respectivei clase. În exemplul<br />

nostru x.f este o metodă valabilă din moment ce MyClass.f este o funcţie. În mod contrar este evident că<br />

x.i nu este o metodă, pentru că MyClass.i nu este o funcţie. Există o diferenţă între MyClass.f şi x.f:<br />

MyClass.f este un obiect funcţie iar x.f este un obiect metodă (una este funcţie, a doua metodă).<br />

9.3.4 Obiecte metodă<br />

În mod uzual o metodă este apelată imediat:<br />

x.f()<br />

În exemplul nostru aceasta va returna şirul de caractere Hello World!. Oricum nu este neapărat necesar să<br />

apelăm o metodă. Putem face acest lucru mai târziu:<br />

xf = x.f<br />

while 1:<br />

print xf()<br />

Exemplul de mai sus va afişa Hello World! la infinit.<br />

Ce se întâmplă exact atunci când este apelată o metodă Aţi observat că x.f() a fost apelată fără nici un<br />

argument, chiar dacă în definiţia funcţiei, din corpul clasei, era specificat un argument.<br />

Ce s-a întâmplat cu argumentul Cu siguranţă <strong>Python</strong> generează o excepţie atunci când o funcţie care necesită un<br />

argument este apelată fără el, deşi s-ar putea nici să nu fie utilizat.<br />

Probabil că aţi ghicit deja răspunsul: metodele au întotdeauna ca prim parametru un obiect.În exemplul nostru<br />

apelul x.f() este absolut echivalent cu MyClass.f(x). În general a apela o metodă cu n parametrii este<br />

echivalent cu a apela funcţia corespondentă inserând la începutul listei de n argumente obiectul a cărui metodă se<br />

doreşte apelată.<br />

Dacă nu aţi înţeles încă cum funcţionează metodele, o privire asupra implementării probabil că ar clarifica lucrurile.<br />

Atunci când se face o referire la un atribut, care nu este un atribut dată, al unei instanţe este căutat în clasa<br />

din care face parte. Dacă numele reprezintă un atribut existent în respectiva clasă (un obiect de tip funcţie), este<br />

creat un obiect metodă “împachetând” obiectul instanţă şi obiectul funcţie(tocmai găsit). În acest fel se creeaza<br />

un obiect metodă. Atunci când un obiect metodă este apelat cu o listă de argumente, el este despachetat din nou,<br />

o nouă listă de argumente este construită din obiectul instanţă şi lista de argumente originală. În cele din urmă<br />

obiectul funcţie este apelat cu noua listă de argumente.<br />

9.4 Alte observaţii<br />

Atributele de tip dată suprascriu atributele metodă cu acelaşi nume. Pentru a evita conflicte de nume, ce pot cauza<br />

erori greu de găsit în programe mari, este bine să folosiţi o convenţie pentru denumiri. O posibilă convenţie ar fi<br />

scrierea numelelor de metode cu literă iniţială mare, prefixarea numelor de atribute dată cu un şir de caractere mic<br />

şi unic, (poate fi un underscore), sau pentru metode folosiţi verbe, iar pentru propietăţi substantive.<br />

Atributele dată pot fi accesate de metode la fel de bine ca şi de utilizatorii unui anumit obiect. Cu alte cuvinte<br />

clasele nu pot fi folosite pentru a implementa tipuri de date abstracte. De fapt, în <strong>Python</strong>, nu există nici un fel de<br />

mecanism de ascundere a datelor - aceasta realizându-se numai prin convenţie. (Pe de altă parte, implementarea<br />

limbajului <strong>Python</strong>, relizată în C, poate ascunde complet detalii de implementare controlând accesul la datele unui<br />

obiect, dacă o astfel de abordare este necesară).<br />

Utilizatorii unui obiect ar trebui să manipuleze atributele dată (propietaţile) cu atenţie - orice modificare directă a<br />

acestora putând duce la o “incoerenţă” a obiectului respectiv. De notat este faptul că utilizatorii unui obiect, pot<br />

9.4. Alte observaţii 61

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!