Je eerste klassen en objecten · oefening
Werk met meerdere onafhankelijke objecten
In de vorige les verwees self tijdens de ene methodeaanroep naar first en tijdens een andere naar second. Die verandering kan doordat beide namen naar afzonderlijke objecten leiden die uit dezelfde klasse zijn gemaakt.
Een programma kan zo veel instanties van Question maken als het nodig heeft:
first = Question("Two plus two?", "4")
second = Question("Three plus three?", "6")
Beide instanties volgen dezelfde definitie Question, maar elk bewaart een eigen toestand.
Een attribuut op first veranderen wijzigt second niet:
first.prompt = "What is two plus two?"
print(first.prompt)
print(second.prompt)
Die onafhankelijkheid is één reden waarom objecten nuttig zijn om meerdere records van hetzelfde soort te modelleren.
Objecten passen in verzamelingen
Een object is een Python-waarde, dus een lijst kan objecten bevatten zoals die strings of dictionaries bevat:
questions = [first, second]
for question in questions:
print(question.prompt)
De lusvariabele verwijst in elke ronde naar een andere instantie van Question.
Namen zijn geen objecten
De variabelenaam is alleen één manier om een object te bereiken:
current = first
Nu verwijzen current en first naar hetzelfde object. Dit maakt geen kopie.
current.prompt = "Updated prompt"
print(first.prompt)
De uitvoer is Updated prompt, omdat beide namen naar één instantie leiden. In de figuur staat “Two names, one object”: twee namen, één object. “Same object” benadrukt dat het om hetzelfde object gaat. De onderste kop zegt dat je via current iets verandert en die wijziging via first ziet; het ene object heeft daarna de aangepaste vraagtekst.

Wat doet het wijzigen van current.prompt na current = first?
De volgende les geeft een ander object een verzameling vragen en laat de objecten samenwerken.
Opdracht
Maak de ontbrekende derde Question, voeg die toe aan de lijst questions en laat current naar first verwijzen.
Werk daarna current.prompt bij naar "How much is two plus two?". De afgedrukte eerste vraagtekst moet veranderen, terwijl de tweede en derde gelijk blijven.