[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