Če želimo ustvariti točko (7, 6)
trenutno potrebujemo tri vrstice kode:
t = Tocka() t.nastavi_x(7) t.nastavi_y(6)
Inicializator – t.j. metodo __init__
, ki nastavi začetne vrednosti – lahko posplošimo tako, da ji dodamo dodatna parametra. Oba parametra x
in y
sta neobvezna. Če ju ne vključimo, bosta lastnosti dobili privzeto vrednost 0. Naš izboljšani razred sedaj izgleda takole:
Gornji program izpiše:
4 2 6 3 0 0
Izboljšani inicializator nam omogoča, da lahko hkrati ko ustvarimo novo točko, nastavimo tudi vrednosti lastnosti _x
in _y
, ki predstavljata absciso in ordinato točke.
Oglejmo si, kako uporabljamo inicializator in metodi za vračanje oziroma spreminjanje lastnosti točke. Najprej ustvarimo točko (7, 6)
. Če želimo na primer spremeniti absciso točke iz vrednosti 7
na vrednost (3)
, to storimo z metodo nastavi_x(vrednost)
.
a = Tocka(7, 6) a.nastavi_x(3)
Podobno za spreminjanje ordinate točke uporabimo metodo nastavi_y(vrednost)
. Če pa želimo samo izvedeti absciso ali ordinato točke, potem uporabimo metodi vrni_x()
oziroma vrni_y()
.
Vse skupaj postane bolj zanimivo, če želimo vrednost abscise ali ordinate točke povečati ali zmanjšati glede na trenutno vrednost abscise oziroma ordinate.
Oglejmo si primer, pri katerem ustvarimo točko ter nato povečamo odrinato točke za 1. To storimo tako, da najprej s pomočjo inicializatorja usvarimo nov objekt. Nato z metodo vrni_y()
preberemo trenutno vrednost ordinate točke, ki jo nato povečamo za 1 ter s pomočjo metode nastavi_y(vrednost)
ustrezno spremenimo oziroma popravimo vrednost lastnosti objekta.
b = Tocka(2, -3) b.nastavi_y(b.vrni_y() + 1) # Povečamo trenutno vrednost ordinate za 1
Če bi sedaj točko izpisali, bi dobili naslednji izpis:
2 -2
Pri objektnem programiranju lahko lastnosti objekta vračamo ali spreminjamo samo z metodama vrni oziroma nastavi (ki ju lahko imenujemo tudi drugače, dokler vemo, da gre za metodi getter in setter).
Python nam omogoča elegantnejši in razumljivejši zapis klica teh metod, ki si ga bomo ogledali v nadaljevanju. Gre za to, da spremenljivki, ki jo lahko poimenujemo enako kot lastnost objekta, dinamično priredimo metode getter, setter in po potrebi tudi deleter. To naredimo s funkcijo property()
. Glede na sintakso Python poskrbi za to, da pokliče ustrezno (zasebno) metodo.