0%

Deine ersten Klassen und Objekte · Übung

Definiere eine neue Art von Wert

Die vorige Lektion hat gezeigt, dass ein gewöhnliches Dictionary text verwenden kann, wo das Programm prompt erwartet. Wir haben den Schlüssel korrigiert, aber Python selbst wusste nicht, was eine vollständige Quizfrage enthalten sollte.

Jetzt möchten wir eine verlässliche Art von Wert definieren. Du hast bereits viele Arten von Python-Werten verwendet: Strings bieten Stringoperationen, Listen bieten Listenoperationen, und jeder Wert hat einen Typ, der Python sagt, was für ein Objekt er ist.

Eine Klasse ist eine Definition, mit der Python Objekte eines neuen Typs erstellen kann. Hier ist die kleinste nützliche Klassendefinition:

class Label:
    pass

class beginnt die Definition. Label ist der Name des neuen Typs. Klassennamen verwenden normalerweise PascalCase, wobei jedes Wort mit einem Großbuchstaben beginnt.

Der eingerückte Körper gehört zur Klasse. pass ist ein Platzhalter, der den Körper vorerst leer bleiben lässt.

Erstelle eine Instanz

Sobald die Definition vorhanden ist, rufe die Klasse auf:

label = Label()

Das erstellt ein Objekt. Ein aus einer Klasse erstelltes Objekt nennen wir eine Instanz dieser Klasse.

Diese beiden Namen verweisen auf unterschiedliche Dinge:

  • Label verweist auf die Klasse, also die Definition.

  • label verweist auf eine Instanz, die aus dieser Definition erstellt wurde.

Der Unterschied ist wichtig. Ein Rezept ist keine Mahlzeit, und eine Klasse ist keine ihrer Instanzen. Anders als beim Vergleich mit einem Rezept ist eine Python-Klasse allerdings ausführbarer Code, den Python direkt verwendet.

Eine Klassendefinition Label erstellt eine Instanz, und die Variable label zeigt auf dieses Objekt.

Worauf verweist label, nachdem dieser Code ausgeführt wurde?

class Label:
    pass

label = Label()

Ein Objekt kann Zustand speichern

Für dieses erste Beispiel können wir nach dem Erstellen des Objekts Attribute hinzufügen:

label.text = "Question 1"
label.color = "blue"

Ein Attribut ist ein benannter Wert, der zu einem Objekt gehört. Die Punktnotation verbindet die Instanz links mit einem ihrer Attribute rechts.

Attribute nachträglich hinzuzufügen reicht aus, um die Grundbestandteile sichtbar zu machen. Dabei wird aber leicht eines vergessen. Wende diese Syntax in der Übung an, indem du Question definierst. Die nächste Lektion sorgt dann dafür, dass jede neue Frage mit beiden Attributen beginnt.

Aufgabe

Definiere die Klasse Question über dem vorhandenen Code.

Verwende pass als ihren Körper. Der verbleibende Code sollte eine Instanz erstellen, ihre Attribute prompt und answer hinzufügen und den Fragetext ausgeben.