Brzo predstavljanje objekata i klasa

11.1.1 Brzo predstavljanje objekata i klasa 

Problem: OK, ja donekle razumem šta je objekat, ali šta su to klase?
Rešenje: Iako sam, uglavnom, odlagao objašnjavanje pojmova objekata i klasa do ovog trennutka, vidim da je ipak potrebno malo objašnjenje, kako bi ti mogao bolje da razumeš rad sa listama. Ovo će biti samo formalan prikaz, jer objekte i klase ću ti objasniti detaljnije u kasnijem delu ovog tutorijala.
Prvo da razjasnim pojmove:
Kada kažem objekat mislim na nešto.
Kada kažem klasa mislim na nešto što stvara objekat. Iz ovoga sledi da je klasa neki deo našeg programa koji definiše neki objekat. Klasa je u neku ruku slična funkcijama ili modulima, samo što funkcija definiše neki postupak, modul definiše neki skup funkcija, a klasa definiše objekat.
Za sad od tebe tražim samo da imaš apstraktno mišljenje tj da zamisliš ovo, ne i da znaš šta to znači, jer kao što sam već napomenuo, sve ću ti to objasniti kasnije. 
Rad sa listama je primer rada sa objektima i klasama. Uf, ovaj primer ti zvuči previše apstraktno, hajde nešto što si već naučio. Rad sa promenljivima je takođe primer rada sa objektima i klasama. Kada definišemo promenljivu i kada joj dodelimo vrednost, na primer, neka promenljiva ima vrednost broja 5, to možeš zamisliti kao stvaranje objekta (objekat je, stručnim rečima instanca klase) koji je klase (tipa) - int (klasa celih brojeva):
>>> a = 5 
>>> type(a) 
<class 'int'> 
>>> 
Funkcija type() nam daje odgovor – šta je nešto. U ovom slučaju, ona nam je vratila odgovor da je vrednost promenljive a klase int.
Ako se nikada do sada nismo susreli sa vrednostima koje su int (integeri – celi brojevi), logično bi bilo da sledeća komanda bude help(int) kako bi se neke stvari razjasnile. Ali, u samom help-u, mnoge stvari i nisu jasne, zar ne? Vidimo da nam on prosleđuje raznorazna imena, od kojih većina počinju sa duplom donjom crtom. Ali šta nam ta imena govore? Ona verovatno nečemu služe?
Klase mogu da imaju definisane metode. Metod je samo fensi ime za neke funkcije koje su definisane unutar te klase, i namenjene su isključivo za korišćenje pri upotrebi objekata te klase. Možeš to zamisliti kao funkcije koje su definisane unutar nekog modula, pa tako i ovde – funkcije koje su definisane unutar neke klase su – metode klase. Ali, ovoga puta, te funkcije možeš koristiti samo u slučaju kada u svom programu imaš kreiran objekat te klase. Na primer:
>>> a = ['1', 1] 
>>> type(a) 
<class 'list'> 
>>> help(list) 
...
...
 |  
 |  __sizeof__(...) 
 |      L.__sizeof__() -- size of L in memory, in bytes 
 |  
 |  append(...) 
 |      L.append(object) -- append object to end 
 |  
 |  count(...) 
 |      L.count(value) -> integer -- return number of occurrences of value 
 |  
 |  extend(...) 
 |      L.extend(iterable) -- extend list by appending elements from the iterable 
...
Iz help-a vidimo da u Pythonu postoji neki metod sa nazivom append koji pripada klasi list. Ovaj metod nam omogućava da dodajemo neke stavke na kraj naše liste. Na primer:
>>> a.append('ruzmarin') 
>>> a 
['1', 1, 'ruzmarin'] 
>>> 
Ovde sam dodao string 'ruzmarin' u prethodno definisanu listu. Obrati pažnju na jednostavnu sintaksu – mi smo samo upotrebili oznaku tačka da pristupimo metodi klase. Zar nije jednostavno? Pa jeste, isto kao što smo pristupali funkcijama u modulima, tako isto i pristupamo funkcijama koje su definisane u klasama! 
Klasa takođe može da ima i polja (fields). Polja su neke promenljive, koje su definisane u klasi i služe za korišćenje samo u toj klasi. Opet, može da se zamisli paralela sa modulima, u kojima takođe možete da imate neke promenljive koje služe nečemu u tom modulu. Ove promenljive (polja) možete koristiti samo u slučaju kada ste u svom programu definisali neki objekat iz te klase. Poljima, kao i metodama, se pristupa pomoću oznake sa tačkom, na primer:
>>> a = 5 
>>> a.denominator 
1 
>>> 
Promenljiva a je klase int, koja poseduje polje denominator. Obrati pažnju na pristup ovoj promenljivoj – koristimo tačku. Takođe obrati pažnju na razliku između pristupa poljima i pristupa metodama. Metodama, pošto su, ništa drugo nego funkcije, pristupamo tako što koristimo zagrade posle imena:
promenljiva.metoda()
Poljima, budući da su to samo neke promenljive, pristupamo bez tih zagrada:
promenljiva.polje
Eto, to je, za sada, prilično kratko predstavljanje objekata i klasa.

11.1 Liste Indeks 11.1.2 Povratak
na liste

Коментари

Popularno

Tehnički problemi (i ostala tehnička čudesa) u najavi (i u bliskoj istoriji)

Izvršavanje Python programa

Vredela si svakoga stiha

Izbor uređivača teksta (Editora)

Kreiranje izvorne datoteke

Prevelika očekivanja

Strip o Brus Liju?

Matematički izrazi (ekspresije) u naše programu

Parametri i argumenti funkcija