[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