0%

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:

  • Label verwijst naar de klasse, de definitie.

  • label verwijst 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.

Een klassedefinitie van Label maakt één instantie en de variabele label wijst naar dat object.

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.