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 _______________________________________________ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python