Metode

14.3 Metode

Već sam ti govorio kako klase/objekti imaju metode, koje su baš kao i funkcije, osim što u definiciji imaju dodatnu self promenljivu kao parametar. Sada ću ti pokazati logičan primer koji je proistekao iz našeg kancelarijskog poslovanja.
Krenimo od definisanja jednostavne metode koja ne trebamo da prosleđujemo nikakve argumente:
>>> class Sekretarica: 
...     def salutiraj(self): 
...             print('Pozdravljam te Svemoćni Gospodaru.') 
... 
>>> Đorđe = Sekretarica() 
>>> Milan = Sekretarica() 
>>> Đorđe.salutiraj() 
Pozdravljam te Svemoćni Gospodaru. 
>>> Milan.salutiraj() 
Pozdravljam te Svemoćni Gospodaru. 
>>> 

U ovom primeru vidimo promenljivu self u akciji. Primeti da salutiraj() metoda "neprima" argumente,  ali smo mi definisali self u listi parametara:
>>> Milan.salutiraj('Ko') 
Traceback (most recent call last): 
  File "<stdin>", line 1, in <module> 
TypeError: salutiraj() takes 1 positional argument but 2 were given 
>>> 
Opa, error nam govori da smo prosledili 2 parametra, a funkcija prima samo 1 – self, tj sam objekat! I zbog toga možemo ovako da uradimo:
>>> Sekretarica.salutiraj(Milan) 
Pozdravljam te Svemoćni Gospodaru. 
>>> 
Upravo o tome sam ti i pričao u prošlom poglavlju!
Ali, šta ćemo sa metodama kojima trebaju parametri – npr fotokopiranje?
>>> class Sekretarica: 
...     def salutiraj(self): 
...             print('Pozdravljam te Svemoćni Gospodaru.') 
...     def fotokopiranje(self, šta, koliko): 
...             for i in range(koliko): 
...                     print(šta) 
... 
>>> Đorđe = Sekretarica() 
>>> Milan = Sekretarica() 
>>> Đorđe.fotokopiranje('Faktura', 3) 
Faktura 
Faktura 
Faktura 
>>> Sekretarica.fotokopiranje(Milan, 'račun', 6) 
račun 
račun 
račun 
račun 
račun 
račun 
>>> 
Vidimo da nije ništa teže od onoga što smo i do sada radili u Pythonu.
No, mala digresija. Ako bi smo ovako formulisali klasu, šta su nam Đorđe i Milan u programu? Da li je Đorđe neka karakteristika objekta ili je to samo ime kojim zovemo neki objekt Sekretarica? Đorđe je samo promenljiva koja označava neki objekat! Ovako napisana klasa ne daje nikakve karakteristične osobine Đorđetu ili Milanu. Mi ih razlikujemo, ali izgleda da njihov posao može da obavi i bilo ko (koga pokupimo sa ulice):
>>> Sekretarica().fotokopiranje('Dostava', 3) 
Dostava 
Dostava 
Dostava 
>>>
Ovakav način rada u OOP-u nije loš u mnogim slučajevima, ali, pobogu, u mnogim slučajevima mi želimo da naši objekti budu karakteristični, jedinstveni, da imaju neke posebne osobine koje su nam potrebne za neki rad i tako dalje... 
U nastavku ćemo videti kako da postignemo da svaki naš pojedinačni objekat bude jedinstven i drugačiji, i u isto vreme da bude skroz isti kao i svaki drugi objekat svoje klase.
Ako ti ova rečenica nije jasna, da li razmišljaš o pojmovima „isti“ ili „različit“ i šta li to oni znače? Ako moja supruga vozi isti automobil kao i ja, a pri tom i moj komšija vozi isti automobil kao ja, koliko automobila je u priči? Jedan, dva ili tri? Da li je ono što ja smatram da je „isto“ isto što i ono što ti smatraš kao „različito“ i obrnuto?
Polako sa apstraktnim razmišljanjem. Idemo mi dalje....

14.2 Klase Indeks 14.4 Metoda __init__

Коментари

Popularno

Audacious - program za slušanje muzike

LibreOffice Calc - program za izradu tabela

Brasero - program za rezanje CD-ova

Bekstvo iz Titela

Minitube - program za praćenje YouTube sadržaja

Idemo

Bezimena

Pozadina Bekstva iz titela

Pažljivo sa MS Word dokumentima koje primate putem elektronske pošte

Šta je to "prosijački štap" i kako se do njega dolazi? (prvi deo)