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 ~~~~~~~~~~~~~ Vystup: self.class = __main__.M M = None M2 = __main__.M Takze objekt triedy M je referencovany aj premennou M2 aj atributom self.__class__, ale premenna M obsahuje cuduj sa svete hodnotu None. Martin Blazik wrote: > Cusik, > ja bych chybu vazne nevidel v tom ze pristupuju v destruktoru ke > staticke promenne tridy. Problem je v tom, ze Python v nekterych > pripadech provedl jiz gc a to tak, ze znicil definici tridy M. > > class M: > b = 0 > > def __del__(self): > print 'global()', globals() > print 'self', self > print 'M', M > print 'M.b', M.b > > > a = M() > x = M() > > > global(): {'a': None, '__builtins__': <module '__builtin__' (built-in)>, > '__file__': 'fall.py', 'M': <class __main__.M at 0x40297d4c>, 'x': > <__main__.M instance at 0x402a7b0c>, '__name__': '__main__', '__doc__': > None} > self: <__main__.M instance at 0x402a7aec> > M: __main__.M > M.b: 0 > global(): {'a': None, '__builtins__': <module '__builtin__' (built-in)>, > '__file__': None, 'M': None, 'x': None, '__name__': '__main__', > '__doc__': None} > self: <__main__.M instance at 0x402a7b0c> > M: None > Exception exceptions.AttributeError: "'NoneType' object has no attribute > 'b'" in <bound method M.__del__ of <__main__.M instance at 0x402a7b0c>> > ignored > > V pripade 'x' je videt, ze trida M uz je znicena :-) Tipnul bych si, ze > gc odstranuje polozky v nejakem zajimavem sledu a obcas se stane, ze > driv uklidi tridu nez vola destruktor jeji instance. Tim padem uz zadna > staticka promenna tridy neexistuje. Pokusim se na to jeste podivat v > dokumentaci. > > lachtan _______________________________________________ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python