Ausgabe von Objekten in Klassen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
RRButon
User
Beiträge: 8
Registriert: Mittwoch 6. Oktober 2021, 15:17

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
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Das ist der korrekt Eintrag. Wenn du den ausgeben willst, kannst du die __repr__ Methode überladen.
RRButon
User
Beiträge: 8
Registriert: Mittwoch 6. Oktober 2021, 15:17

__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.
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Da es damit geht, hast du wohl was falsch gemacht. Da du den Code nicht zeigst, kann man leider nicht sehen, was.
RRButon
User
Beiträge: 8
Registriert: Mittwoch 6. Oktober 2021, 15:17

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
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Das repr muss ja auch auf dem Eintrag definiert werden, damit der die einzelnen Attribute ausgibt.
Benutzeravatar
__blackjack__
User
Beiträge: 14076
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@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 :-)')])
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Antworten