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

Jan Martinek honza na dp.fce.vutbr.cz
Neděle Červen 4 00:36:53 CEST 2006


> 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
> 

Nemůžu změnit M.b na self.b především kvůli tomu, že bych pak nemohl 
demonstrovat to podivné chování v Pythonu ;-)

Nevím, jestli si rozumíme, ale odkaz na M.b určitě není nesprávný zápis, 
jedná se o objekt patřící ke třídě. Není to totéž co self.b, ačkoli se 
to tak zezačátku (kvůli prohledávání jmenných prostorů) může zdát. 
Například tento program

class M:
   b = 10
   def __init__(self):
     self.b += 1         # což není totéž co self.b.__add__(1)
   def __del__(self):
     print self.b        # Objekt instance
     print M.b           # Objekt třídy

a1 = M()


by měl vypsat

11
10

ale místo toho napíše 11 a pak spadne. Tedy alespoň u mě ;-)

--
Jan Martinek


Další informace o konferenci Python