OOP - sestavljanje razreda v Pythonu

OOP - sestavljanje razreda v Pythonu

Avtor: Anja Vencelj

Uvod v objektno programiranje

V Pythonu lahko ustvarjamo razrede, v katerih hranimo objekte z določenimi lastnostmi - to so skupki podatkov, katere želimo upravljati kot neko celoto. Vsem objektom določimo iste lastnosti.

Primeri:

1. Ustvarimo razred Denarnica, v katerem hranimo objekte tipa Denarnica, ki imajo lastnosti denarnice. Te lastnosti so lahko: količina denarja v denarnici, lastnik denarnice in še karkoli drugega v zvezi z denarnico. Če vnašamo lastnosti konkretnih denarnic, lahko dodamo tudi lastnosti: barva, velikost, material, iz katerega je denarnica narejena in podobno.

2. Ustvarimo razred Učenec, kateremu pripadajo objekti z naslednjimi lastnostmi: ime učenca, priimek učenca, razred, ki ga obiskuje, ...

3. Razred Države vsebuje objekte z lastnostmi: ime države, velikost države, število prebivalstva,...

Prednosti objektnega programiranja - metode

V razredu lahko definiramo metode, s katerimi lahko delujemo na objekte v tem razredu - jim spreminjamo lastnosti (rečemo, da spreminjamo stanje objektov), izpisujemo določene lastnosti objektov, itd...

Definicija razreda

Poskusimo definirati nek razred z imenom Učenci. V tem razredu definirajmo samo enega konkretnega učenca s komponentami(lastnostmi): ime, starost in spol.

(slika1.png)

V Python lupini v spremenljivko učenec1 shranimo učenca iz razreda Učenci.

Do posameznih lastnosti objekta učenec1 dostopamo tako, da napišemo: učenec1.imeLastnosti. Lastnosti lahko tudi spreminjamo, tako da zapišemo: učenec1.imeLastnosti = 'Nova lastnost'

Najlažje to vidimo na spodnji sliki, kjer smo izpisali vse tri lastnosti objekta učenec1, na koncu pa smo mu še spremenili ime:

(slika2.png)

Konstruktor

Seveda pa bi mi radi imeli v razredu več kot samo enega učenca. Zato moramo objekte v razredu definirati nekoliko drugače - s pomočjo konstruktorja.

Konstruktor je metoda, s katero definiramo objekte v nekem razredu.

Vedno jo poimenujemo  __init__  .

V parametre konstruktorja zapišemo vse tiste komponente, ki naj bi jih imeli naši objekti.

Razred  Učenci  spremenimo tako, da v njem definiramo konstruktor:

(slika3.png)

Preverimo 'obnašanje' razreda v lupini:

(slika4.png)

Kot vidimo, lahko tudi sedaj ustvarjamo objekte - učence. Novega učenca smo ustvarili zelo preprosto. Zgolj z vpisom novih vrednosti komponent je nastala nova učenka Maja. Še vedno pa obstaja tudi učenec Miha.

Še o konstruktorju

V definiciji konstruktorja laho že v naprej definiramo vrednosti parametrov, ki pa jih lahko kasneje spreminjamo.

Če si ogledamo prejšnji primer:

(slika3.png)

vidimo, da smo definirali privzete vrednosti parametrov.

Če tak konstruktor kličemo brez parametrov, nastavi privzete vrednosti. To lahko vidimo na spodnjem primeru:

(slika6.png)

Primer ustvarjanja razreda

Poglejmo si primer:

Ustvari razred DržaveEU, v kateremu hraniš lastnosti držav, članic EU. Te komponente naj bodo: ime države(podatek tipa niz), uporablja Euro (True ali False), število prebivalcev (podatek tipa int).

Definiraj konstruktor, ki sprejme vse tri podatke in ustrezno nastavi komponente. Če je konstruktor klican brez parametrov, nastavi ime države na: "Slovenija" , država uporablja Euro(vrednost te komponente naj bo True), število prebivalstva pa naj bo 2000000.

Več kot samo ustvarjanje razreda

V razred, ki smo ga ustvarili lahko definiramo še različne metode, s katerimi bomo delovali na objektih.

Definirajmo metodo  __str__  . To je metoda, ki vrača opis razreda v bolj razumljivi obliki. Metoda vrne niz. Ta metoda se začne in konča s podčrtajem in jo zato lahko uporabljamo tudi drugače: (kot str(objekt)), oziroma se znotraj metode print celo uporabi avtomatsko.

Dodajmo metodo  __str__  v razred Učenci:

(slika8.png)

V lupini izgleda zapis takole:

(slika7.png)

Še metode...

V razred lahko dodajamo še tako imenovane get in set metode. Set metodo je pametno uporabljati predvsem zato, ker z njo preprečujemo neposreden dostop do spremenljivk s podatki o objektu. To pomeni, da nam ta metoda lahko preveri ali je podatek, ki naj bi ga na novo vnesli, smiseln ali ne. S tem preprečimo napačne vnose v spremenljivke s podatki.

Tak primer bi bil, da bi npr. učencu dali ime, v katerem bi bila števila namesto črk, ali pa da bi se učencem starost povečala za 100 let,... S set metodami lahko objektom v razredu nastavljamo vrednosti komponent. Z get metodami pa 'pridobivamo' podatke o vrednostih komponent objektov v razredu.

SET metode

Za lažje razumevanje si poglejmo primer.

V razredu  Učenci  definirajmo set metodo, ki najprej preveri če je n manjši od 100, nato pa učenca postara za n let:

(slika10.png)

Preverimo, če metoda deluje:

(slika9.png)

Z metodo  postaraj  smo ubjekt  učenec1  uspešno postarali za 3 leta.

GET metode

Poglejmo si še primer GET metode. V vseh metodah seveda lahko uporabljamo tudi pogojne stavke, zanke, uporabljamo lahko tudi sezname,...

V razredu definirajmo metodo, ki nam vrne ime učenca, če je učenec moškega spola. Če učenec ni moškega spola pa vrne  False  .

V razredu definirajmo novo metodo:

(slika13.png)

In preverimo, če metoda deluje v lupini:

(slika12.png)
0%
0%