Objekte lahko spreminjamo

Stanje objekta lahko spremenimo, če priredimo novo vrednost kateri koli izmed njegovih lastnosti, ki smo jih naredili javno dostopne s pomočjo funkcije property(). Na primer, če želimo spremeniti velikost pravokotnika, ne da bi spremenili njegov položaj, lahko spremenimo vrednosti lastnosti _sirina in _visina.

okvir.sirina += 50
okvir.visina += 100

Verjetno bi spreminjanje velikosti pravokotnika kot metodo, imenovano spremeni, radi vključili v razred Pravokotnik. Vključili bomo tudi metodo, imenovano premakni, ki nam bo omogočala premikanje položaja pravokotnika (glej primer v urejevalniku kode).

Včasih je zelo uporabno, da imamo poleg metod tudi samostojne funkcijo, ki ji kot parameter posredujemo enega ali več objektov, funkcija pa ta objekt oziroma objekte spremeni. Običajno klicatelj funkcije ohrani sklice do posredovanih objektov, zato lahko vidi vse spremembe, ki jih nad objekti izvrši funckija. Funkcije, ki delujejo tako, imenujemo modifikatorji (ang. modifiers).


 
1
class Tocka:
84
85
86
class Pravokotnik:
87
88
  def __init__(self, polozaj=Tocka(), sirina=0, visina=0):
93
94
  def __str__(self):
98
99
  def _vrni_oglisce(self):
102
103
  def _nastavi_oglisce(self, polozaj=Tocka()):
106
107
  def _vrni_sirina(self):
110
111
  def _nastavi_sirina(self, sirina=0):
114
115
  def _vrni_visina(self):
118
119
  def _nastavi_visina(self, visina=0):
122
123
  oglisce = property(
126
  )
127
128
  sirina = property(
131
  )
132
133
  visina = property(
136
  )
137
138
  def spremeni(self, delta_sirine=0, delta_visine=0):
139
    """ Spremeni dimenzije (širino in višino) pravokotnika """
140
    self._sirina += delta_sirine
141
    self._visina += delta_visine
142
143
  def premakni(self, dx=0, dy=0):
144
    """ Spremeni položaj pravokotnika oz. premakne pravokotnik """
145
    self._oglisce._x = dx
146
    self._oglisce._y = dy
147
148
149
r = Pravokotnik(Tocka(10,5), 100, 50)
150
print(r)
151
r.spremeni(25, -10)
152
print(r)
153
r.premakni(-10, 10)
154
print(r)
155

Izvedi Počisti