Eine Mensakarte kennt ihr Guthaben und kann bezahlen
Eine Klasse ist ein Bauplan für Objekte, die Daten und Fähigkeiten zusammenhalten. In Python beschreibt sie, was ein Ding weiß und was es kann.
Eine Mensakarte kennt ihr Guthaben. Man kann sie aufladen, und man kann mit ihr bezahlen. Ohne Klasse liegen Guthaben und Funktionen lose nebeneinander, und jede Karte braucht eigene Variablen.
Am Ende dieser Lektion
Notiz
Ich kann ein Ding als Klasse mit Zustand und Verhalten modellieren.
Schlüsselwörter
| Begriff | Was er bedeutet | Beispiel |
|---|---|---|
| Klasse | der Bauplan für gleichartige Objekte | class Mensakarte: |
| Objekt | ein einzelnes Ding, gebaut nach einer Klasse | |
| Attribut | ein Wert, den ein Objekt speichert | self.guthaben_cent |
| Methode | eine Funktion, die zu einer Klasse gehört | |
| Konstruktor | die Methode __init__, die ein neues Objekt einrichtet | |
| self | der Name des Objekts, das die Methode gerade aufruft |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Eine Klasse bündelt Daten und Funktionen
Mit class beschreiben Sie einen Typ von Dingen. Die Klasse legt zwei Dinge fest: Zustand und Verhalten. Der Zustand sind die Attribute, zum Beispiel das Guthaben. Das Verhalten sind die Methoden, zum Beispiel bezahlen.
Der Konstruktor __init__ läuft bei jedem neuen Objekt genau einmal. Er setzt die Anfangswerte.
Eine Mensakarte als Klasse
class Mensakarte:
def __init__(self, name, guthaben_cent):
self.name = name
self.guthaben_cent = guthaben_cent
def aufladen(self, betrag_cent):
self.guthaben_cent = self.guthaben_cent + betrag_cent
def bezahlen(self, preis_cent):
if preis_cent > self.guthaben_cent:
return False
self.guthaben_cent = self.guthaben_cent - preis_cent
return True
karte = Mensakarte("Mia", 500)
print(karte.bezahlen(350))
print(karte.guthaben_cent)
print(karte.bezahlen(350))
# Ändern Sie 350 in 100 und starten Sie noch einmal.
Der Zustand der Karte Schritt für Schritt
| Schritt | Aufruf | guthaben_cent danach | Ergebnis |
|---|---|---|---|
| Start | Mensakarte("Mia", 500) | 500 | neues Objekt |
| 1 | bezahlen(350) | 150 | True |
| 2 | bezahlen(350) | 150 | False, das Guthaben reicht nicht |
| 3 | aufladen(200) | 350 | kein Rückgabewert |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
self ist das Objekt der Methode
Jede Methode bekommt als erstes Argument das Objekt, das sie aufruft. Der Name dafür ist self. Beim Aufruf karte.aufladen(200) setzt Python karte für self ein.
Mit self.guthaben_cent lesen und ändern Sie also das Attribut genau dieses Objekts, nicht das eines anderen.
Zwei Objekte derselben Klasse
class Fahrkarte:
def __init__(self, fahrten):
self.fahrten = fahrten
def entwerten(self):
self.fahrten = self.fahrten - 1
heft = Fahrkarte(4)
einzel = Fahrkarte(1)
heft.entwerten()
print(heft.fahrten)
print(einzel.fahrten)
# Rufen Sie einzel.entwerten() auf und lesen Sie beide Zahlen noch einmal.
Ein häufiger Fehler
Warnung
Viele glauben, das Attribut gehöre der Klasse und alle Objekte teilten sich den Wert. Die Klasse ist nur der Bauplan. Jedes Objekt trägt seine eigenen Attribute, solange Sie sie in __init__ auf self setzen.
Ein Objekt im Lab bauen und lesen
Im Lab legen Sie die Datei karte.py an. Sie enthält eine Klasse Karte mit zwei Objekten. Das Programm gibt die Guthaben beider Karten aus und fragt Python nach dem Namen der Klasse.
Die Ausgabe folgt aus dem Programm selbst: erst 150 100, dann Karte, dann False.
Den Ordner anlegen
mkdir -p ~/oop-laborHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Hineingehen
cd ~/oop-laborHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Die Klasse Karte schreiben
printf 'class Karte:\n def __init__(self, guthaben_cent):\n self.guthaben_cent = guthaben_cent\n\n def aufladen(self, betrag_cent):\n self.guthaben_cent = self.guthaben_cent + betrag_cent\n\nerste = Karte(100)\nzweite = Karte(100)\nerste.aufladen(50)\nprint(erste.guthaben_cent, zweite.guthaben_cent)\nprint(type(erste).__name__)\nprint(erste is zweite)\n' > karte.pyHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Das Programm starten
python3 karte.pyHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Auch eine Zahl ist ein Objekt
python3 -c 'print(type(5).__name__, type("a").__name__, type([1]).__name__)'Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
In Python ist jeder Wert ein Objekt
Die Ausgabe int str list zeigt es: Auch die Zahl 5, der Text "a" und die Liste sind Objekte einer Klasse. Die Klassen int, str und list sind in Python schon eingebaut.
Mit class bauen Sie Ihre eigenen Typen dazu, mit Attributen und Methoden, die zu Ihrem Problem passen.