[python] ukončení interpretu, zničení objektu

Radek Kaňovský rk na dat.cz
Úterý Červen 6 09:21:00 CEST 2006


On Tue, Jun 06, 2006 at 09:00:24AM +0200, Jan Janech wrote:

> Ja viem, ze globalne objekty uz mozu byt zrusene garbage collectorom,
> ale ja som sa prave snazil ukazat ze u tej classy to tak nieje. Prave to
> sa mi zda zvlastne, ze premenna ma nastavenu hodnotu None, ale objekt
> triedy este existuje v pamati a moze byt referencovany... okrem toho,
> pri tom ako je python spraveny si neviem predstavit ako by niekto chcel
> zrusit najskor instanciu class objektu a az potom instanciu danej triedy...

On tu tridu nezrusi driv nez instanci, pouze neni trida dostupna pres
nazev tridy z namespacu modulu. Pres `self.__class__' se da trida ziskat.
Nekde se proste s rusenim referenci musi zacit.

Radek Kaňovský

> Radek Kaňovský wrote:
> > On Sun, Jun 04, 2006 at 11:43:56PM +0200, Jan Janech wrote:
> > 
> >> Objekt triedy este nieje odstraneny, ale iba symbol M je nastaveny na
> >> hodnotu None...
> >> Dost zaujimave spravanie, po tom ako som si po dvoch rokoch zvykol, ze v
> >> pythone vsetko ide ako ma :)
> >>
> >> class M:
> >>
> >>     b = 0
> >>
> >>     def __del__(self):
> >>
> >>         print "self.class =", self.__class__
> >>
> >>         print "M =", M
> >>
> >>         print "M2 =", M2
> >>
> >> a2 = M()
> >> M2 = M
> > 
> > Ja myslim, ze tohle chovani je v poradku. Metoda __del__ se muze
> > spolehnout v podstate jenom na jmeno `self'. Globalni objekty uz mohou
> > byt odalokovane. Pokud potrebuju nejaky externi objekt v metode __del__,
> > je potreba pouzit nejaky trik a objekt si "pribalit" k funkci:
> > 
> >     import sys
> > 
> >     class M:
> >         
> >         def __del__():
> >             _sys = sys # _sys je cellvar
> >             def __del__(self):
> >                 print 'SYS', _sys
> >         __del__ = __del__()
> > 
> > Radek Kaňovský


Další informace o konferenci Python