Razredi v Pythonu

Razredi v Pythonu

Avtor: Daniel Prša

Definicija razreda

Pomemben del programiranja je tako imenovano objektno programiranje. Objekt nam predstavlja skupek podatkov, s katerim želimo uporavljati kot s celoto. Primeri objektov:

  • datum (dan, mesec, leto)
  • avtomobil (znamka, starost, moč motorja, poraba,...)

Če želimo ustvariti objekt moramo najprej definirati razred. Razred je opis vrste objekta ali nekakšen načrt, kako naj bo objekt videti.

Razred definiramo z izrazom class. Npr., če bi želeli definirati razred z imenom Dijak, bi napisali:

        class Dijak:
            pass # prazen blok

Sedaj lahko preverimo, ali smo res ustvarili nov objekt:

        >>>novUcenec = Dijak()
        >>>print (novUcenec)
        <__main__.Dijak object at 0x029D76B0>

In vidimo lahko, da se je ustvaril nov objekt Dijak na nekem naslovu v pomnilniku.

Objektne metode

Vsakemu razredu dodajamo metode, s katerimi bomo definirali lastnosti (stanja) objekta. Metode vpeljemo z ukazom def (enako kot funkcije), vendar pa mora pri vsaki metodi biti kot prvi parameter naveden self. Ta beseda se nanaša na objekt, ki ga obdelujemo - na samega sebe. Lahko bi zapisali tudi kaj drugega, vendar obstaja nek "dogovor", da uporabimo prav ta parameter - self.

Primer:

(dijak1.png)

V idle se nam bo izpisalo:

        Pozdravljen!

Konstruktor

Ob tvorbi objekta nastavimo začetno stanje spremenljivk. Tej metodi rečemo konstruktor. Konstruktor se izvede takoj, ko ustvarimo primerek razreda. Pozorni moramo biti, kako zapišemo to metodo. Besedo init oklepata dva podčrtaja, ki se držita skupaj: __init__


Vzemimo naš razred Dijak in mu dodajmo dve spremenljivki - ime in oddelek. Uporabili bomo metodo def __init__ . Prvi parameter je vedno self, nato pa dodamo še ime in oddelek:

(dijak2.png)

Vnosa self.ime in self.oddelek nam pomenita lastnosti objekta, ki ga ustvarjamo. Ustvarimo sedaj dva nova Dijaka (objekta) in jima dodajmo različne vrednosti(ime in oddelek):

(dijak3.png)

Python nam parametre ponudi celo sam. Prej smo ustvarili objekt a. Če ponovno vnesemo a in piko in nato malo počakamo se nam pokaže tole:

(dijak4.png)

Metoda za izpis

Metodo za izpis imenujemo __str__ . Ta metoda nam določa, kako se naj objekt obnaša, če ga želimo videti kot niz. V razredu Dijak bomo metodo definirali, tako da se nam bosta ime in oddelek na "novo ustvarjenega" dijaka izpisala, ko bomo uporabili ukaz print za nov objekt:

(dijak6.png)

Ustvarimo dva "dijaka" in vnesimo ukaz za izpis:

(dijak5.png)

Dostop do stanj (set/get metodi)

Dostop do stanj ima prednosti pred "neposrednim" dostopom, kajti tako imamo večjo kontrolo pravilnosti. Recimo, da bomo našemu razredu Dijak dodali uspeh, ki se v srednjih šolah meri od 1-5. Želimo torej, da uporabnik vnese le te vrednosti. To je tako imenovana set metoda. V konstruktorju - najprej zadevo enostavno nastavimo na neko privzeto vrednost, potem pa poskusimo nastaviti prav z metodo SET (ali pa sprožimo izjemo in objekta sploh ne naredimo!)

SET metoda

        def nastaviUspeh (self, nov_uspeh):
            if <= nov_uspeh <= 5:
                self.uspeh = nov_uspeh

Do stanja objekta bomo pa dostopali z GET metodo:

        def vrniUspeh (self):
            return self.uspeh

Popraviti moramo pa tudi konstruktor.

        self.nastaviUspeh(uspeh)

Naš razred Dijak bomo torej dopolnili takole:

(dijak7.png)

Sedaj pa bomo preverili delovanja. Ustvarili bomo najprej dijaka z učnim uspehom 4 in enega, kjer se bomo zatipkali in napisali uspeh 10:

(dijak8.png)

Lahko vidimo, da je uspeh pri prvem dijaku sedaj 4, pri drugem vnosu pa se vrne na privzeto vrednost 3.

0%
0%