Seite 1 von 1

Ausgabe in Variable speichern statt direkt ausgeben

Verfasst: Mittwoch 24. Juni 2015, 12:23
von Bolitho
Hallo,

es geht um die Methode print_contents(self, sorting=None) der Klasse Aktienliste. In der geposteten Form funktioniert der Code und es erfolgt eine Ausgabe. Ich möchte die Ausgabe aber jetzt nicht direkt durchführen sondern an Tkinter zwecks Ausgabe in einem Textfeld übergeben.

Wenn ich

Code: Alles auswählen

text_aus_print_contents = *sorted(self.items, key=sortkey)
versuche bekomme ich eine Fehlermeldung. Auch diverse andere Versuche sowie eine Recherche im Internet blieben ohne Erfolg. Entweder habe ich gerade ein Brett vor dem Kopf oder irgendwas noch nicht verstanden. Bitte um Hilfe.

Vielen Dank!

Code: Alles auswählen

class Aktie(object):
    def __init__(self, counter):
        self.id = counter
        self.name = eingabe('Name: ')
        ...   

    def __str__(self):
        return ('{wkn:6} {name:15}  '
                '{aktkurs:8.2f} {aktdiv:8.2f} {divrendite:8.2f} '
                '{akteps:8.2f} {kgv:8.2f}'.format(**self.__dict__))

...            

class Aktienliste(object):
    def __init__(self):
        self.items = []

    ...

    def print_contents(self, sorting=None):
        sortkey = attrgetter(sorting) if sorting else None
        print(*sorted(self.items, key=sortkey), sep='\n')       
Tkinter Übergabe:

Code: Alles auswählen

t.insert(END, text_aus_print_contents)

Re: Ausgabe in Variable speichern statt direkt ausgeben

Verfasst: Mittwoch 24. Juni 2015, 13:39
von BlackJack
@Bolitho: Statt so etwas komisches zusammen zu hacken würde man eine Methode einführen die so ein Objekt in eine Zeichenkette umwandelt. Und die kann man dann mit `print()` ausgeben oder in eine GUI einfügen, oder als Mail verschicken, oder…

Objekte müssen kein `__dict__` haben oder falls sie es haben müssen dort nicht alle Attribute drin gespeichert sein, deshalb würde ich statt ``self.__dict__`` eher ``vars(self)`` schreiben. Beziehungsweise nur ``format(self)`` und dann als Platzhalter so etwas wie '{0.name}'. Und bitte hör auf Namen abzukürzen, das liest sich ja furchtbar.

Re: Ausgabe in Variable speichern statt direkt ausgeben

Verfasst: Mittwoch 24. Juni 2015, 16:32
von Sirius3
@Bolitho: wenn Du eine Fehlermeldung bekommst, wäre es nett zu wissen, was für eine Fehlermeldung das ist. Das * vor "sorted" bedeutet, dass die Ergebnisliste entpackt und die Elemente als einzelne Argumente an "print" übergeben werden. Sowas macht nur bei Funktionsaufrufen einen Sinn, nicht bei Zuweisungen.