[python] Getters and Setters.
Filip Štědronský
regnarg na seznam.cz
Sobota Červen 21 14:46:22 CEST 2008
On So, čen 21, 2008 at 01:09:04 +0200, David Michal wrote:
> Asi je to jen mou neznalosti, ale preci kdyz budu dusledne pouzivat get
> a set metody, tak si pri pripadne zmene atributu ulehcim praci, jelikoz
> takova zmena bude znamenat editaci pouze samotne tridy a nebudu muset
> prochazet cely kod a hledat kde vsude se na tridu odvolavam.
Gettery a settery jsou hezká věc, ale nikdy, NIKDY, ne,
když jsou používány explicitně. Volat obj.set_size(12)
je prostě zavrženíhodná ohavnost. Python je hlavně o
přehlednosi, čitelnosti a smysluplnosti kódu, takže
samozřejmě nabízí lepší řešení.
class Test(object):
def _set_a(self,val):
print "Value changed"
self._a=val
def _get_a(self):
return self._a-1
a=property(_get_a, _set_a)
A pak se normálně používá print t.a, t.a=5, etc. Zcela
přirozeně, jasně a bez chaosu — o volání getterů/setterů
se stará Python. Z toho je zcela jasné, proč je možné
rozhodnutí kdykloliv změnit, navenek se bude vše chovat
stále stejně.
Další hloupostí je používat gettery/settery, které jen
čtou/nastavují proměnnou. Někdo si myslí — hurá, mám
settery, mám správné zapouzdření, jsem OOOOP guru, ale
program tím ničím lepší není. Jen se přidává overhead
voláním zbytečných metod.
S pozdarvem
regnarg
--
regnarg --- http://rg.pretel.cz -- JID: regnarg na jabber.cz
V péči o štěstí druhých nacházíme své vlastní. --Platón
Přátelství může trvat jedině mezi dobrými lidmi. --Cicero
Další informace o konferenci Python