Seite 1 von 1

Ausgabe von Objekten in Klassen

Verfasst: Montag 1. November 2021, 21:12
von RRButon
Hi

Ich habe zwei Klassen in einem Modul erstellt.

Code: Alles auswählen

class Eintrag:
    def __init__(self, start, ende, text):
        self.start = start
        self.ende = ende
        self.text = text

class Agenda:
    def __init__(self):
        self.alleEintraege = []
        
    def add_entry(self, start, ende, text):
        self.alleEintraege.append(Eintrag(start, ende, text))
        
    def get_all_entries(self):
        return self.alleEintraege
Das Modul habe ich in Jupyter Netbook importiert. Hat auch alles super funktioniert. Ich konnte Einträge machen. Jedoch wenn ich die Methode def get_all_entries ausführe, erhalte ich folgendes Resultat:
[<sem_agenda.Eintrag object at 0x000001ECBA0ECEE0>]
Ich bin langsam am Verzweifeln! Habe schon einiges ausprobiert und bin nicht schlauer geworden. Wie bekomme ich den korrekt dargestellten Eintrag wieder zurück?

Vielen Dank für eure Hilfe.
Gruss

Re: Ausgabe von Objekten in Klassen

Verfasst: Montag 1. November 2021, 21:31
von __deets__
Das ist der korrekt Eintrag. Wenn du den ausgeben willst, kannst du die __repr__ Methode überladen.

Re: Ausgabe von Objekten in Klassen

Verfasst: Montag 1. November 2021, 21:53
von RRButon
__deets__ hat geschrieben: Montag 1. November 2021, 21:31 Das ist der korrekt Eintrag. Wenn du den ausgeben willst, kannst du die __repr__ Methode überladen.
Und wie tue ich dies? habe es mit __repr__ probiert, kommt dasselbe raus.

Re: Ausgabe von Objekten in Klassen

Verfasst: Montag 1. November 2021, 21:55
von __deets__
Da es damit geht, hast du wohl was falsch gemacht. Da du den Code nicht zeigst, kann man leider nicht sehen, was.

Re: Ausgabe von Objekten in Klassen

Verfasst: Montag 1. November 2021, 22:21
von RRButon
Sorry!

Habe es schon mit beiden __repr__ getestet. Leider kommt immer noch der Speicherort.

Code: Alles auswählen

class Eintrag:
    def __init__(self, start, ende, text):
        self.start = start
        self.ende = ende
        self.text = text

class Agenda:
    def __init__(self):
        self.alleEintraege = []

#    def __repr__(self):
#        return f"{start}, {ende}, {text}"

    def __repr__(self):
        return f"{self.alleEintraege}"
    def add_entry(self, start, ende, text):
        self.alleEintraege.append(Eintrag(start, ende, text))
        
    def get_all_entries(self):
        return self.alleEintraege

Re: Ausgabe von Objekten in Klassen

Verfasst: Montag 1. November 2021, 22:57
von __deets__
Das repr muss ja auch auf dem Eintrag definiert werden, damit der die einzelnen Attribute ausgibt.

Re: Ausgabe von Objekten in Klassen

Verfasst: Montag 1. November 2021, 23:35
von __blackjack__
@RRButon: Kleine Anmerkung vorweg: Namen werden in Python klein_mit_unterstrichen geschrieben. Ausnahmen sind Konstanten (KOMPLETT_GROSS) und Klassen (PascalCase).

Und triviale Getter macht man in Python nicht.

Ausserdem solltest Du Dich vielleicht auf eine Sprache festlegen und nicht mal deutsch und mal englisch benennen.

Jetzt der Werbeblock: Attrs ist ein ganz wunderbares Package um Klassen zu schreiben und sich Schreibarbeit zu sparen:

Code: Alles auswählen

#!/usr/bin/env python3
from attr import attrib, attrs


@attrs
class Entry:
    start = attrib()
    end = attrib()
    text = attrib()


@attrs
class Agenda:
    entries = attrib(factory=list)

    def add_entry(self, start, ende, text):
        self.entries.append(Entry(start, ende, text))


def main():
    agenda = Agenda()
    agenda.add_entry("10:00", "11:00", "Spätes Frühstück")
    agenda.add_entry("16:00", "18:00", "Pause :-)")

    print(agenda)


if __name__ == "__main__":
    main()
Ausgabe:

Code: Alles auswählen

Agenda(entries=[Entry(start='10:00', end='11:00', text='Spätes Frühstück'), Entry(start='16:00', end='18:00', text='Pause :-)')])