[python] Praca s polom, navedte ma na spravnu cestu

Leos Pol leos na radiante-corp.com
Čtvrtek Únor 8 11:01:13 CET 2007


Zdravim,

promenou arr tridy cSet jsi definoval jako tridni (statickou) promennou. 
Tridu cSet staci definovat takto:
class cSet:
    def __init__(self):
       self.arr = []

Jeste si neodpustim poznamku, ze list je build-in funkce, takze 
nedoporucuji pouzivat jako promennou.

Leo

msk.conf wrote:
> Ahoj.
>
> Ako dlhorocny programator c++ som sa rozhodol trosku zacat s pythonom, ale som 
> znacne konsternovany.
>
> Uvediem priklad:
>
> # definujem classu, obsahuje jedno pole ako member
> class cSet:
> 	arr = []
>
> # pole, kde uchovam niekolko cSet-ov
> list = []
>
> # napln pole
> for i in range ( 3 ):
> 	cset = cSet()
> 	cset.arr.append ( "lama" + str ( i ) )
> 	list.append(cset)
>
> # vysledok
> for i in list:
> 	print i.arr
>
>
> Vypise to:
> ['lama0', 'lama1', 'lama2']
> ['lama0', 'lama1', 'lama2']
> ['lama0', 'lama1', 'lama2']
>
> Namiesto:
> ['lama0']
> ['lama1']
> ['lama2']
>
> Pride mi to ako dost podivne chovanie, predpokladam, ze to suvisi s inym 
> pristupom k referenciam na objekty, ako v c++ a ze na zaciatku for cyklu sa 
> nevyrvori ( z mne neznameho dovodu ) novy objekt typu cSet a pouzije sa ten z 
> predoslej alokacie.
>
> Mozete mi to niekto vysvetlit?
>
> Dik
>
>   


-- 
----
Leos Pol
SW Engineer
Radiante Corp.

If it can be imagined,
we can implement it



Další informace o konferenci Python