Objekt zu einem iterablen objekt erweitern
Verfasst: Mittwoch 2. Februar 2011, 17:45
Hallo,
Die Aufgabe:
Eine spezielle, selbst definierte Liste ist gegeben.
Jetzt sollen wir damit einige kleinigkeiten machen, bei denen wir jeweils über die liste Iterieren müssen...
Ich dachte mir: Ich muss doch nicht immer den ganzen Iterationskram neu schreiben,
sondern es müsste reichen, wenn ich das Objekt selbst iterierbar mache, so das z.B. for-schleifen funktionieren.
Das Objekt hat 2 attribute
data, der aktuelle wert
next, entweder None (dann wars das letzte glied) oder ein gleichartiges Listenobjekt mit den Restlichen werten.
Ganz grob zusammengebastelt hab ich mir nach kurzer Lektüre der Dokumentation das hier, was auch Funktioniert, aber...
Was ich jetzt wissen möchte: Wie macht man sowas RICHTIG.
Hab da was von Generator-Klassen und yield gelesen, aber mir fehlt für sowas ein Beispiel, das ich nachvollziehen kann,
wie das dann genau Implementiert wird.
lg,
...
Die Aufgabe:
Eine spezielle, selbst definierte Liste ist gegeben.
Jetzt sollen wir damit einige kleinigkeiten machen, bei denen wir jeweils über die liste Iterieren müssen...
Ich dachte mir: Ich muss doch nicht immer den ganzen Iterationskram neu schreiben,
sondern es müsste reichen, wenn ich das Objekt selbst iterierbar mache, so das z.B. for-schleifen funktionieren.
Das Objekt hat 2 attribute
data, der aktuelle wert
next, entweder None (dann wars das letzte glied) oder ein gleichartiges Listenobjekt mit den Restlichen werten.
Ganz grob zusammengebastelt hab ich mir nach kurzer Lektüre der Dokumentation das hier, was auch Funktioniert, aber...
Code: Alles auswählen
class Liste(object):
def __init__(self...)
....
def __iter__(self):
return self.__iterobj(self)
class __iterobj:
def __init__(self, data):
self.data = data
def __next__(self):
ret = self.data.data
if self.data.next is None:
raise StopIteration()
else:
self.data = self.data.next
return ret
def __iter__(self):
return self
Hab da was von Generator-Klassen und yield gelesen, aber mir fehlt für sowas ein Beispiel, das ich nachvollziehen kann,
wie das dann genau Implementiert wird.
lg,
...