[python] ukončení interpretu, zničení objektu
slacker
slacker na inmail.cz
Sobota Červen 3 22:53:18 CEST 2006
Jan Martinek wrote:
> >> tento program
>>> class M:
>>> b = 0
>>> def __del__(self):
>>> M.b
>>>
>>> a1 = M()
>>>
>>> vyhodí výjimku
>>>
>>> Exception exceptions.AttributeError: "'NoneType' object has no attribute
>>> 'b'" in <bound method M.__del__ of <__main__.M instance at
>>> 0x2aaaaab50a28>> ignored
>>>
>> rekl bych ze tam i tak mas chybu v M.__del__
>>
>
> Jakou chybu? Jestli máš na mysli to
> M.b
> tak se domnívám, že to chyba není. Ale nechci se o tom přít, protože i
> když ten řádek nahradím
>
> M.b = 0
>
> tak to při ukončení programu taky vyhazuje tu výjimku.
>
> Zjistil jsem další věc - když kód vepíšu do intepretu, tak při ukončení
> výjimku nevyhodí. Zatímco když vytvořím soubor s tímtéž kódem a ten
> spustím, tak to výjimku vyhodí. Děje se tak na Linuxu ve verzích
> Pythonu 2.4.2 i 2.4.3.
>
> --
> Jan Martinek
> _______________________________________________
Dle meho skromneho nazoru M.b chybou je, ale z jineho duvodu.
Dovolim si civotat Python reference manual:
Variables defined in the class definition are class variables; they are
shared by all instances. To define instance variables, they must be
given a value in the __init__() method or in another method. Both class
and instance variables are accessible through the notation
``self.name'', and an instance variable hides a class variable with the
same name when accessed in this way.
Dulezita je veta "Jak tridni, tak i instancni promenne jsou pristupne
pomoci zapisu ''self.jmeno'' ...
Takze, kdyz zmenite M.b na self.b, docilite pozadovaneho efektu.
slacker
Další informace o konferenci Python