[python] ukončení interpretu, zničení objektu
Jan Martinek
honza na dp.fce.vutbr.cz
Neděle Červen 4 09:43:52 CEST 2006
Jan Kundrát wrote:
> Jan Martinek wrote:
>> 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ě ;-)
>
> Nemel by spis vypsat 11 a 11?
>
Doufám, že nežiju v nějakých bludech, ale podle mě to má opravdu vypsat
11
10
Například tento program
class M:
b = 10
def __init__(self):
print self.b, M.b, id(self.b) == id(M.b)
self.b = 11
print self.b, M.b, id(self.b) == id(M.b)
a = M()
Vypíše
10 10 True
11 10 False
Jestliže se odkážu na self.b aniž bych ho předtím inicializoval, tak
Python tento název nenajde. Nicméně pokračuje dál v prohledávání
jmenného prostoru, až narazí na M.b. Takže se self.b a M.b jeví jako
tytéž objekty. Ale jakmile do self.b přiřadím nějakou (jinou) referenci,
najde se při volání self.b přednostně. A od té chvíle už self.b a M.b
není totéž.
Pokud se ale pletu, tak mě prosím vyveďte z omylu.
--
Jan Martinek
Další informace o konferenci Python