0%

Deine ersten Klassen und Objekte · Übung

Arbeite mit mehreren unabhängigen Objekten

In der vorigen Lektion verwies self während eines Methodenaufrufs auf first und während eines anderen auf second. Dieser Wechsel ist möglich, weil beide Namen zu getrennten Objekten führen, die aus derselben Klasse erstellt wurden.

Ein Programm kann so viele Question-Instanzen erstellen, wie es braucht:

first = Question("Two plus two?", "4")
second = Question("Three plus three?", "6")

Beide Instanzen folgen derselben Definition Question, aber jede behält ihren eigenen Zustand.

Eine Attributänderung an first verändert second nicht:

first.prompt = "What is two plus two?"
print(first.prompt)
print(second.prompt)

Diese Unabhängigkeit ist ein Grund dafür, dass Objekte zum Modellieren mehrerer Datensätze derselben Art nützlich sind.

Objekte passen in Sammlungen

Ein Objekt ist ein Python-Wert. Deshalb kann eine Liste Objekte genauso enthalten wie Strings oder Dictionarys:

questions = [first, second]

for question in questions:
    print(question.prompt)

Die Schleifenvariable verweist bei jedem Durchlauf auf eine andere Question-Instanz.

Namen sind keine Objekte

Der Variablenname ist nur ein Weg, ein Objekt zu erreichen:

current = first

Jetzt verweisen current und first auf dasselbe Objekt. Das erstellt keine Kopie.

current.prompt = "Updated prompt"
print(first.prompt)

Die Ausgabe lautet Updated prompt, weil beide Namen zu einer Instanz führen.

Die Namen first und current zeigen auf ein Question-Objekt. Deshalb verändert eine Änderung an current.prompt auch das, was first sieht.

Was bewirkt nach current = first eine Änderung an current.prompt?

Die nächste Lektion gibt einem anderen Objekt eine Sammlung von Fragen und lässt die Objekte zusammenarbeiten.

Aufgabe

Erstelle das fehlende dritte Question, füge es der Liste questions hinzu und lass current auf first verweisen.

Ändere dann current.prompt in "How much is two plus two?". Der ausgegebene erste Fragetext sollte sich ändern, während der zweite und dritte unverändert bleiben.