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