[python] globalni promenne

Zdenek Pavlas zdenek.pavlas na nextra.cz
Pátek Srpen 22 11:05:28 CEST 2003


Jan Svec wrote:

> Pokud se nemylim, tak lze provest 'import __main__'...

Aha, to jsem nevedel.. Zkusil jsem a funguje to.. super.

> Muj nazor na tento thread zni takto: globalni promenne jsou
> prezitek. Pokud touzite po jakemsi zapouzdreni, pouzijte
> OOP!

Silne nesouhlasim. Velmi casto potrebujete "globalni kontext",
ktery uchovava takove veci jako DB connection, ruzne konfiguracni
parametry, logovaci subsystem a jeho parametry, atd..

Posilat tento kontext jako dalsi atribut do kazde funkce
je zbytecny overhead, stejne tak cpat jej do kazdeho objektu
jako instance attribut.

Me se treba osvedcilo v kazde aplikaci dat do __builtins__
vlastni funkci 'log ()' pro logovani, a dictionary 'conf'
kde je rozparsovan config file.

Proste pokud mate singleton objekt ke kteremu pristupujete
"vlastne porad", je rozumne mit jej globalni.

> Ale protoze Python je jazyk objektovy (nikdo mi to
> nevymluvi), tak zde existuji objekty, na ktere vytvarim
> odkazy. A pokud si v lokalnim prostoru (nebo jakemkoli jinem)
> vytvorim odkaz, pak odkazuje na objekt, cili pokud v

V tomhle je v pythonu docela bordel. "Odkaz" muzete vzit
i na dictionary nebo list ktere ale nejsou objekty (nejde
je subclassovat), a to prestoze maji metody.

> nepromitne! Kolikrate jsem premyslel (k implementaci jsem se
> nedostal) nad tim vytvorit objekt "odkaz", ktery by pracoval
> jako proxy a ktery by si pamatoval jmeno promenne na kterou
> ukazuje a tu by take modifikoval. Zatim jsem ho nakonec
> nikdy nepotreboval.

Tohle uz myslim v pythonu je, viz "bastion" a podobne.
Funguje to ale pouze nad pythonovskym objektem.

> Je vsak treba pripomenout, ze globalni promenne a jejich
> pouzivani svedci o spatnem navrhu a ze "Neco shnileho je ve
> state Danskem." Stejne tak by dobre navrzeny program mel jit
> rozdelit do modulu v libovolne fazi vyvoje. Pokud tak tomu
> neni, dozajista jste porusil jedno z pravidel programovani:
> Think first, program latter.

Bullshit. Nepisete nahodou v Hungarian notation? :) Debata je
o nicem protoze lokalni promenne neexistuji. Je jedno globalni
pole a to se (ruznym zpusobem) indexuje.

> A jeste jedno, nedokazu si predstavit vase starosti, pokud
> byste se rozhodl zmenit architekturu programu (napr.
> pouzivani vlaken apod). Nechci vam do niceho zasahovat, ale
> Python si urcite zaslouzi programovat v nem objektove.

OOP je ok- pro veci na ktere se hodi.

-- 
Zdenek Pavlas
Application Developer
NEXTRA Czech Republic s.r.o.  http://www.nextra.cz

_______________________________________________
python mailing list
python na py.cz
http://py.cz/mailman/listinfo/python



Další informace o konferenci Python