Seite 1 von 1
generator `__str__()` Methode überschreiben?
Verfasst: Donnerstag 26. November 2015, 19:03
von mutetella
Um in einem Code mit vielen Generatoren beim Debuggen einen besseren Überblick zu haben, wäre es nützlich, wenn ein ``print any_generator`` nicht nur ein '<generator object submit at 0x7f31f099b730>' ausgeben würde. Der Name der Funktion (in diesem Fall `submit`) ist halt schon ein wenig dürftig... Gibt es eine Möglichkeit, ähnlich wie das Überschreiben der `__str__()` Methode?
Re: generator `__str__()` Methode überschreiben?
Verfasst: Donnerstag 26. November 2015, 19:28
von Üpsilon
Re: generator `__str__()` Methode überschreiben?
Verfasst: Donnerstag 26. November 2015, 19:37
von cofi
@Üpsilon: Damit ist der Generator nutzlos, da verbraucht.
Nein, `__str__` ist auf Generatoren read-only. Du koenntest wohl eine Funktion schreiben, die dann den Generator zurueckgibt und _deren_ `__doc__` benutzen, aber das macht den Code reichlich umstaendlich.
Interessehalber: Warum reicht dir das denn nicht? Was hast du damit vor?
Re: generator `__str__()` Methode überschreiben?
Verfasst: Donnerstag 26. November 2015, 20:56
von DasIch
Du könntest eigene Klassen verwenden die sich wie Iteratoren verhalten (oder Generatoren wenn du dies wirklich brauchst).
Re: generator `__str__()` Methode überschreiben?
Verfasst: Mittwoch 2. Dezember 2015, 09:21
von mutetella
cofi hat geschrieben:Warum reicht dir das denn nicht? Was hast du damit vor?
Ich habe Klassen, die jeweils eine `submit` Methode haben, die jeweils einen Generator zurückgibt, der dann '<... submit at ...>' heißt. Die Generatoren werden in einen stack gelegt und von dort dann abgearbeitet. Jetzt wäre es halt schön gewesen, wenn ich beim Betrachten des stacks nicht nur lauter `<... submit at ...>` Elemente hätte, sondern eben sehen könnte, aus welcher Klasse der jeweilige Generator stammt.
Re: generator `__str__()` Methode überschreiben?
Verfasst: Mittwoch 2. Dezember 2015, 10:48
von DasIch
Du könntest natürlich auch einfach folgendes machen (ungetestet):
Code: Alles auswählen
class ReprGenerator:
def __init__(self, generator, repr):
self.generator = generator
self.repr = repr
def __iter__(self):
return self
def __next__(self):
return next(self.generator)
def __getattr__(self, name):
return getattr(self, generator, name)
def __repr__(self):
return self.repr
Damit einfach deine Generatoren wrappen und schon haben die alle eine nette Repräsentation.
Re: generator `__str__()` Methode überschreiben?
Verfasst: Mittwoch 2. Dezember 2015, 11:42
von mutetella
@DasIch
Das ist cool... Danke!