[python] globální proměnné
Radek Kanovsky
rk na dat.cz
Pondělí Prosinec 20 16:24:04 CET 2004
On Mon, Dec 20, 2004 at 01:30:44PM +0100, p.kosina wrote:
> >Definice a použití funkce r() a použití třídy do toho nic
> >nového nevnáší. Je to jen krkolomě zapsané vytvoření
> >inicializace proměnné uvnitř existujícího objektu.
>
> napsal jsem spatny priklad, zde je lepsi, proste modikace promenné
> univtr kterekoliv funkce, jako jakysi superglobal (to by mohl byt nazev
> toho noveho klicoveho slova, který by toto delal :-)):
>
> class G:
> pass
> def f():
> x.what=x.what+10
>
> x=G()
> x.what=10
> f()
> print x.what #---> 20
Pouzivanim funkci nebo metod, ktere maji vedlejsi ucinky je podle me
velmi problemove a nepythonovske reseni. Pokud potrebujete do funkce
nebo do metody dostat nejaky kontext nebo globalni data, tak je tam
radeji predejte jako argument v nejakem zapouzdrenem objektu:
class CTX :
def __init__ (self) :
self.x = 10
def add10 (ctx) :
ctx.x = ctx.x + 10
Konkretne tohle by ale bylo mnohem lepsi udelat nasledovne. Pokud metoda
'f' pracuje pouze s globalnimi daty, proc ji nepresunout do tridy G?
class G :
def __init__ (self) :
self.x = 10
def add10 (self) :
self.x = self.x + 10
g = G()
g.f()
Reseni, ktere navrhujete, se vetsinou hodi a pouziva pouze pro read-only data
jako ruzne konstanty apod:
class FCNTL :
LOCK_SH = 1
LOCK_EX = 2
....
LOCK_UN = 8
Zdraví
Radek Kaňovský
Další informace o konferenci Python