No jo. Je to zjednodušení. Petr Messner > Přikryl Petr >> def __iter__(self): >> '''Vraci iterator -- sam sobe iteratorem.''' >> self.idx = 0 >> return self > >prosim takto ne, kdyz udelam >it = iter(slova) >it2 = iter(slova) >tak ty iteratory se navzajem ovlivnuji.
Záleží na tom, k čemu to má sloužit. Dá se to napsat s odděleným objektem iterátoru: class Seznam: def __init__(self,sez): self.data=sez def __getitem__(self,idx): return idx < len(self.data) and self.data[idx] or None def __iter__(self): return SeznamIterator(self) class SeznamIterator: def __init__(self, obj): self.idx = 0 self.obj = obj def next(self): '''Standardni podpora iterace.''' if self.idx >= len(self.obj.data): StopIteration hodnota = Seznam.__getitem__(self.obj, self.idx) self.idx += 1 return hodnota ### VSTUP: ### slova = Seznam(["ITEM-1","ITEM-2","ITEM-3", 4]) prvni = slova[0] druhy = slova[1] treti = slova[2] ctrty = slova[3] # Rucne provadena iterace. it1 = iter(slova) it2 = iter(slova) print id(it1) print id(it2) print next(it1) print next(it2) print next(it1) print next(it2) print next(it1) print next(it2) print next(it1) print next(it2) print '-' * 50 >Problem ale stejne bude v tom, ze kdyz chci >prvy, druhy, treti, ctrty = slova > >tak ten iterator musi vratit presne 4 hodnoty a pak vyvolat >StopIteration. A jak tomu reknes, ze z toho tahas ty 4 hodnoty? Leda >tak tim, ze tam fakt budou presne 4. To ale neni chovani, ktere >ocekava tazatel. Tady je otázka, jestli je očekávání podporováno realitou. Nevím, jestli to vůbec nějak jde. Nedivil bych se, kdyby to nešlo. Takhle se bude chovat i standardní seznam. Pokud to má podporovat iteraci, pak nemá smysl ani to None v __getitem__()
_______________________________________________ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python