0%

Je eerste klassen en objecten · oefening

Geef een object gedrag

De klasse Question maakt nu elke instantie met een vraagtekst en een antwoord. Keer kort terug naar labels om te zien hoe gedrag naast de toestand kan komen te staan die het gebruikt. Een afzonderlijke functie kan tekst met een label vergelijken:

def matches(label, text):
    return text == label.text

De functie heeft de tekst nodig die op een label is opgeslagen en het resultaat beschrijft dat label. Een klasse kan dit gedrag naast de gebruikte toestand bewaren door een instantiemethode te definiëren:

class Label:
    def __init__(self, text, color):
        self.text = text
        self.color = color

    def matches(self, text):
        return text == self.text

De methode wordt via een instantie aangeroepen:

label = Label("Review", "blue")
print(label.matches("Review"))

Python geeft de instantie mee als self. Het argument "Review" wordt text.

Een verantwoordelijkheid heeft een plek gevonden

De methode maakt het programma niet wezenlijk korter. Ze maakt het ontwerp duidelijker:

  • een Label kent zijn eigen tekst;

  • een Label bepaalt of andere tekst overeenkomt;

  • andere delen van het programma hoeven niet in het object te kijken en die regel te herhalen.

Dat is een verantwoordelijkheid: een stuk werk dat één deel van het programma belooft af te handelen.

Welk object wordt self in label.matches("Review")?

Houd de eerste vraagmethode eenvoudig. Pas het labelpatroon toe door het ingevoerde antwoord met het antwoord van deze vraag te vergelijken. Latere ontwerpen kunnen bepalen of hoofdletters of spaties aan de buitenkant worden genegeerd.

Opdracht

Maak is_correct af zodat de methode teruggeeft of response gelijk is aan het antwoord van deze vraag.

Gebruik nadat je methode werkt Step in de oefeneditor. Ga de aanroep van is_correct binnen en zoek self en response in het huidige methodeframe.