172-174 Uros Jovanovic

7.2 Definisanje klasa

Pajton je potpuno objektno orijentisan: možemo da definišemo spostvene klase, naslediti od naših ili već ugrađenih klasa,

i klase koje ste definisali.

Definisati klasu u Pajtonu je vrlo jednostavno. Kao i kod funkcija, ne postoji definicija odvojenog interfejsa. Samo treba

da definišemo klasu i da počnemo da kodiramo. Klasa u Pajtonu pocinje sa rezervisanom reči "class", koju prati ime te klase.

Tehnički, to je sve što je potrebno, pošto klasa ne mora da nasleđuje od bilo koje druge klase.

class PapayaWhip: ①

pass ②

1. Ime ove klase je "PapazaWhip" , i ona je ne nasleđuje od bilo koje druge klase. Klase imena obično pocinje sa velikim slovom,

"EachWordLikeThis", ali ovo je samo dogovor, ne i zahtev.

2. Verovatno ste pogodili ovo, ali sve u klasi je uvučeno, kao i kod u funkciji, "if" iskaz, "for" petlja ili bilo koji drugi kod.

Prva reč koja nije uvučena je van kalse.

Ova "PapayaWhip" klasa ne definiše bilo koju metodu ili osobinu, ali sintaksički, mora da postoji nešto u definiciji, kao

"pass" izjava. Ovo je Pajtonova rezervna reč koja znači "nastavi dalje, ovde nema ništa da se vidi". To je izjava koja ne radi ništa

i dobar je za čuvanje mesta kada ubadamo funkciju ili klasu.

"Pass" izjava u Pajtonu je kao prazan par vitičastih zagrada ({}) u Javi ili C-u.

Mnoge kalse su nasleđene od drugih klasa, ali ova nije. Mnoge klase definišu metode, ali ova ne. Ne postoji stvar koju Pajton

klasa mora da sadrži, a da nije ime. Na primer, C++ programeri možda misle da je čudno da Pajton klase nemaju određene

konstruktore i destruktore. Iako to nije obavezno, Pajton klase mogu imati nešto slično konstruktoru: \_\_init\_\_() metodu.

7.2.1 \_\_init\_\_() metoda

Primer pokazuje "Fib" kalsu koja koristi \_\_init\_\_ metodu.

class Fib:

'''iterator that yields numbers in the Fibonacci sequence''' ①

def \_\_init\_\_(self, max): ②

1. Klase mogu (i trebalo bi) imati "docstring" takodje, kao i module i funkcije.

2. \_\_init\_\_() metoda se poziva odmah posle slučaja kada je klasa napravljena. Bilo bi primamljivo - ali tehnički neispravno -

da ovo zovemo "konstruktor" kalse. Primamljivo je, zato što izgleda kao C++ konstrukot (po dogovoru , \_\_init\_\_() metoda je

definisana za klase), ponaša se kao jedna (to je prvi delić koda koji se izvršava u novo kreiranoj klasi) , i čak zvuči kao

jedna. Pogrešno, zato što je objekat već konstruisan vremenom \_\_init\_\_() metoda je nazvana, i već imamo tačnu napomenu

za novi slučaj klase.

Prvi argument svake metode klase, uključujući i \_\_init\_\_() metodu, je uvek napomena za trenutni slučaj klase. Po dogovoru, ovaj

argument je nazvan "self" . Ovaj argument popunjava ulogu rezervisane reči "this" u C++-u ili Javi, ali "self" nije rezervisana reč

u Pajtonu, već samo dogovor za davanje imena. Ipak, nemojte je zvati nikako drugačije, već "self" ; to je veoma jak dogovor.

U \_\_init\_\_() metodi, "self" se odnosi na novo kreirani objekat; a u drugim metodama klasa, odnosi se na primer u kome je metoda

pozvana. Iako nam je potrebno da definišemo "self" posebno kada kreiramo metodu, mi je ne definišemo kada pozivamo metodu; Pajton

će je dodati automatski.

7.3 Pravljenje instance klase

Pravljenje instance klase u Pajtonu su iskrene. Da biste napravili instancu u kalsi, jednostavno pozovite kalsu kao da je funkcija, dodajući argument koji je \_\_init\_\_() metoda zahtevala.

Vraćena vrednost će biti novo kreirani objekat.

>>> import fibonacci2

>>> fib = fibonacci2.Fib(100) ①

>>> fib ②

<fibonacci2.Fib object at 0x00DB8810>

>>> fib.\_\_class\_\_ ③

<class 'fibonacci2.Fib'>

>>> fib.\_\_doc\_\_ ④

'iterator that yields numbers in the Fibonacci sequence'

1. Kreiramo primer "Fib" kalse (definisane u "fibonacci2" modulu) i dodajemo novo kreirani primer promenjivoj "fib". Mi prosleđujemo jedan

parametar, 100 , koji će završiti kao maksimalni argument u Fib-ovoj \_\_init\_\_() metodi.

2. "fib" je sada primer "Fib" kalse.

3. Svaki primer klase ima ugrađeni atribut, \_\_class\_\_ , koji je objekat klase. Java programeri su možda upoznati sa "Class" kalsom,

koja sadrži metodu kao "getName()" i "getSuperclass()" da bi dobio potrebne informacije o objektu. U pajtonu, ova vrsta podataka

je dostupna preko osobina, ali ideja je ista.

4. Mozemo pristupiti instanci "docstring" isto kao i finkciji ili modulu. Sve instance kalse dele isti "docstring".

U Pajtonu, prosto pozovite klasu kao da je funkcija ili napravite novu instancu klase. Ne postoji određen "new" operator kao

što je to slučaj kod C++-a i Jave.