Python - razred

Python - razred

Avtor: Branko Šarabon

Učni cilji: Gradnja razreda v Python-u

Razred

Objektno programiranje uvaja novo obliko podatkov, ki mu pravimo objekt. Taka oblika podatkov vsebuje spremenljivke in funkcije, ki vplivajo na te spremenljivke.

Poznamo pa tudi razred (class), ki je abstraktna definicija objekta in v resnici ne obstaja.

Če nek razred želimo uporabiti, moramo ustvariti vsaj en njegov primerek (izvod oz. instanco).

Vsakemu takemu primerku oz. instanci pa pravimo objekt.

Če v Pythonu želimo uporabljati objekte, moramo najprej definirati "razred" objektov, iz katerih izhaja. Le-to naredimo tako, kot je prikazano na spodnji sliki:

(1.png)

Prikazan razred vsebuje le podatke. Tak razred lahko uporabimo, kot bomo videli na naslednji strani.

Naprej

Razred - nadaljevanje

Uporaba razreda Oseba, ki smo ga ustvarili, si oglejmo na spodnjem primeru:

(2.png)

Tvorili smo primerek osebe in novi objekt shranili pod spremenljivko učitelj. Pokazali smo tudi, kako dostopamo do posameznih vrednosti atributov oz. kako jim lahko dodelimo novo vrednost. Ko smo spreminjali vrednost učiteljevega atributa drzava, smo s tem spremenili samo atribut objekta učitelj, medtem ko se morebitnim ostalim primerkom atribut drzava ohrani nespremenjen.

Nazaj Naprej

Razred - Metode

Razredu lahko dodamo tudi metode. Metode so v bistvu funkcije, ki so specifične za objekt.

Poglejmo si primer:

(3.png)

Sedaj imamo v razredu metode. Te metode so kakor kakšne druge funkcije, le da jim je dodan poseben argument -  self  . Poglejmo, kako to deluje:

(4.png)

Metodo razreda pokličemo z obliko "razred.metoda()". V našem primeru uporabljamo Avto.pospesuj() in Avto.premakni(). Prvi argument, ki ga podamo, je instanca (primerek) vozila, ki ga uporabljamo, v našem primeru je to audi. Druge argumente pa uporabljamo v skladu z definicijo posamezne funkcije.

Nazaj Naprej

Razred - Metode - nadaljevanje

Obstaja pa tudi krajši (in bolj pogost) način klicanja metod, ki sodijo k nekemu objektu. Tako kličemo metodo objekta in ne metodo razreda.

(5.png)

Uporabimo torej obliko "objekt.metoda()". Python sam interno preslika to kratko obliko klicanja metod v prej omenjeno daljšo obliko.

Nazaj Naprej

Razred - Konstruktor

Kako nam lahko vse to kar smo do sedaj spoznali koristi?

Oglejmo si primer.

Pišemo igrico za dva igralca. Beležiti moramo imena igralcev in dosežene točke, ki se izračunajo na podlagi osvojenih točk in s tem pridobljenega bonusa. Namesto da bi imeli dve imeni igralcev, dve imeni točk itd, uvedemo oz. definiramo razred Igralec in s pomočjo razreda tvorimo dva primerka (dve instanci):

(6.png)

Na ta način bi igro zlahka lahko razširili na več igralcev. Morda se komu tu poraja vprašanje, zakaj smo za imenom razreda, ko smo tvorili nov primerek le-tega, napisali oklepaje. To smo naredili zato, ker imajo vsi razredi posebno metodo z imenom  __init__  , ki jo Python pokliče, ko tvorimo nov primerek razreda. Tej metodi pravimo tudi konstruktor. Če te metode posebej ne definiramo, jo Python sam definira kot funkcijo, ki ne naredi nič. Lahko pa jo sami eksplicitno definiramo in v njej zapišemo kakšno kodo. Primer si bomo pogledali v nadaljevanju.

Nazaj Naprej

Razred - Konstruktor - nadaljevanje

Na spodnji sliki pa si lahko ogledate še primer, kako lahko sami definiramo metodo  __init__  z dodano kodo:

(7.png)

Nazaj Naprej

Vprašanje 1

Imamo razred Oseba, kot je razvidno iz naslednje kode.

 class Oseba:
        ime = 'Janez Kranjski'
        naslov = 'Za krajem 7'
        mesto = 'Kranj'
        drzava = 'Slovenija'
        posta = 4000
        email = 'janez.kranjski@student.fmf.uni-lj.si' 

Kako lahko tvorimo nov primerek razreda Oseba in ga shranimo v spremenljivko človek?

Preveri

Pravilno

Tako je. Pravilno si se zapomnil.

Naprej

Napačno

Še enkrat preveri sintakso, ali se vrni na prosojnico 2, kjer imaš razlago.

Nazaj Naprej

Vprašanje 2

Imamo razred Oseba, kot je razvidno iz naslednje kode.

 class Oseba:
        ime = 'Janez Kranjski'
        naslov = 'Za krajem 7'
        mesto = 'Kranj'
        drzava = 'Slovenija'
        posta = 4000
        email = 'janez.kranjski@student.fmf.uni-lj.si' 

V spremenljivki človek hranimo primerek osebe. Kako bi lahko izpisali vrednost atributa email od človeka?

Preveri

Pravilno

Tako je. Pravilno si se zapomnil.

Naprej

Napačno

Še enkrat preveri sintakso, ali se vrni na prosojnico 2, kjer imaš razlago.

Nazaj Naprej

Vprašanje 3

Ali moramo pri definiciji razreda nujno napisati metodo  __init__  ?

Da
Ne

Pravilno

Tako je. Če je ne definiramo, jo Python definira kot funkcijo, ki ne naredi nič.

Naprej

Napačno

Ni res. Še enkrat se vrni na prosojnico 4, in ugotovi kaj je res.

Nazaj Naprej

0%
0%