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?
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__ |
Коментари
Постави коментар