Seite 1 von 1

Verständnisfrage zu __str__

Verfasst: Sonntag 1. Juli 2012, 20:28
von CasualCoding.org
Hallo Forum!

In meinem Lehrbuch steht folgendes Beispielskript:

Code: Alles auswählen

class Stammbaum:
    def __init__(self, name, vater, mutter):
        self.name = name
        self.vater = vater
        self.mutter = mutter

    def __str__(self):
        s = ""
        if self.name:
            s += self.name + '\n'
            if self.mutter:
                s += 'Mutter von ' + self.name + ': ' + str(self.mutter)
            if self.vater:
                s += 'Vater von ' + self.name + ': ' + str(self.vater)
        return s

sarah = Stammbaum('Sarah', None, None)
willy = Stammbaum('Willy', None, None)
marianne = Stammbaum('Marianne', None, None)
anton = Stammbaum('Anton', None, None)
marlene = Stammbaum('Marlene', willy, sarah)
werner = Stammbaum('Werner', anton, marianne)
jenny = Stammbaum('Jenny', werner, marlene)
print(jenny)
Die Ausgabe ist:

Code: Alles auswählen

Jenny
Mutter von Jenny: Marlene
Mutter von Marlene: Sarah
Vater von Marlene: Willy
Vater von Jenny: Werner
Mutter von Werner: Marianne
Vater von Werner: Anton
Was ich nun nicht recht verstehe: Im Skript wird ja __str__ überschrieben, so dass die Stringrepräsentation so aussieht:

Name
Mutter von Name: Name
Vater von Name: Name

Innerhalb der __str__ Methode wird selbige dann für die Elternteile rekursiv aufgerufen. Warum aber fehlt bei der Ausgabe der Elternteile die Zeile, in der nur der Name der Person steht? Müsste die Ausgabe nicht eher so aussehen? :

Code: Alles auswählen

Jenny
Mutter von Jenny: Marlene
[b]Marlene[/b]
Mutter von Marlene: Sarah
Vater von Marlene: Willy
Vater von Jenny: Werner
[b]Werner[/b]
Mutter von Werner: Marianne
Vater von Werner: Anton

Re: Verständnisfrage zu __str__

Verfasst: Sonntag 1. Juli 2012, 20:31
von cofi
Nein, die Ausgabe von `self.name` bei den Elternteilen fehlt nicht. Du erwartest, dass der `self.name` 2x ausgegeben wird, das sagt der Code aber nicht ;)

Re: Verständnisfrage zu __str__

Verfasst: Sonntag 1. Juli 2012, 20:32
von BlackJack
@SolitaryMan: Nein warum? Die Ausgabe fehlt auch nicht, die steht doch jeweils nach dem Doppelpunkt dort!

Re: Verständnisfrage zu __str__

Verfasst: Sonntag 1. Juli 2012, 20:36
von CasualCoding.org
Aber nach dem Doppelpunkt wird doch mit str(self.mutter) wieder die Methode __str__ aufgerufen, und die beginnt doch mit dem Namen und einem Zeilenumbruch!?

Re: Verständnisfrage zu __str__

Verfasst: Sonntag 1. Juli 2012, 20:50
von BlackJack
@SolitaryMan: Ja genau. Und warum erwartest Du einen Zeilenumbruch *vor* dem Namen? Der steht doch eindeutig *nach* dem Namen.

Re: Verständnisfrage zu __str__

Verfasst: Sonntag 1. Juli 2012, 20:59
von CasualCoding.org
@BlackJack: *kopf* -> *tisch*

Klar, Mann. Danke! :)