Je eerste klassen en objecten · oefening
Definieer een nieuw soort waarde
De vorige les liet zien dat een gewone dictionary text kan gebruiken waar het programma prompt verwacht. We herstelden de sleutel, maar Python zelf wist niet wat een volledige quizvraag moest bevatten.
We willen nu een betrouwbaar soort waarde definiëren. Je hebt al veel soorten Python-waarden gebruikt: strings bieden stringbewerkingen, lijsten bieden lijstbewerkingen en elke waarde heeft een type dat Python vertelt wat voor object het is.
Een klasse is een definitie waarmee Python objecten van een nieuw type kan maken. Hier is de kleinste nuttige klassedefinitie:
class Label:
pass
class begint de definitie. Label is de naam van het nieuwe type. Klassenamen gebruiken normaal PascalCase, waarbij elk woord met een hoofdletter begint.
Het ingesprongen blok hoort bij de klasse. pass is een tijdelijke invulling waarmee het blok voorlopig leeg kan blijven.
Maak een instantie
Roep de klasse aan zodra de definitie bestaat:
label = Label()
Dit maakt een object. Een object dat uit een klasse is gemaakt, noemen we een instantie van die klasse.
Deze twee namen verwijzen naar verschillende dingen:
Labelverwijst naar de klasse, de definitie.labelverwijst naar één instantie die uit die definitie is gemaakt.
Het onderscheid doet ertoe. Een recept is geen maaltijd en een klasse is niet één van haar instanties. Anders dan bij de receptvergelijking is een Python-klasse wel uitvoerbare code die Python direct gebruikt. In de figuur betekent “Class definition” klassedefinitie, “Call the class” roep de klasse aan en “Instance” instantie. “One Label object” is één object van dat type.

Waarnaar verwijst label nadat deze code is uitgevoerd?
class Label:
pass
label = Label()
Een object kan toestand bewaren
Voor dit eerste voorbeeld kunnen we attributen toevoegen nadat het object is gemaakt:
label.text = "Question 1"
label.color = "blue"
Een attribuut is een benoemde waarde die bij een object hoort. Puntnotatie verbindt de instantie links met één van haar attributen rechts.
Attributen achteraf toevoegen is genoeg om de basisstukken zichtbaar te maken, maar je vergeet er makkelijk één. Pas deze syntaxis in de oefening toe door Question te definiëren; de volgende les zorgt er daarna voor dat elke nieuwe vraag met beide attributen begint.
Opdracht
Definieer de klasse Question boven de bestaande code.
Gebruik pass als blok. De overige code moet één instantie maken, de attributen prompt en answer toevoegen en de vraagtekst afdrukken.