[python] ukončení interpretu, zničení objektu
Jan Janech
devel na atlas.sk
Neděle Červen 4 23:43:56 CEST 2006
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
Další informace o konferenci Python