Delo z lastnostmi

Omenili smo, da do lastnostmi posameznega objekta ne moremo dostopati neposredno, ampak z uporabo ustreznih metod. Pri Pythonu pa lahko spremenljivki, ki ima enako ime kot zasebna lastnost priredimo funkcijo property() s katero lahko dinamično kličemo ustrezne (zasebne) metode, s katerimi vračamo ali spreminjamo vrednost zasebne lastnosti.

Tole zveni precej zapleteno, zato si oglejmo primer:

class Tocka:

  def __init__(self, x=0, y=0):
    self._x = x
    self._y = y

  def _vrni_x(self):
    return self._x

  def _nastavi_x(self, x):
    self._x = x

  def _vrni_y(self):
    return self._y

  def _nastavi_y(self, y):
    self._y = y

  x = property(
    fget = _vrni_x,    # Ime metode getter
    fset = _nastavi_x  # Ime metode setter
  )

  y = property(
    fget = _vrni_y,    # Ime metode getter
    fset = _nastavi_y  # Ime metode setter
  )

Oglejmo si še delovanje oziroma uporabo tega primera v interaktivnem urejevalniku.


 
1
class Tocka:
2
3
  def __init__(self, x=0, y=0):
7
8
  def _vrni_x(self):
11
12
  def _nastavi_x(self, x):
15
16
  def _vrni_y(self):
19
20
  def _nastavi_y(self, y):
23
24
  x = property(
25
    fget = _vrni_x,    # Ime metode getter
26
    fset = _nastavi_x  # Ime metode setter
27
  )
28
29
  y = property(
30
    fget = _vrni_y,    # Ime metode getter
31
    fset = _nastavi_y  # Ime metode setter
32
  )
33
34
35
p = Tocka(4, 2)
36
print(p.x, p.y)
37
p.x = 8
38
p.y = 3
39
print(p.x, p.y)
40
p.y += 1
41
print(p.x, p.y)
42

Izvedi Počisti



Gornji program izpiše naslednje:

4 2
8 3
8 4