Lässt es sich mit cremefarbenem Papier, einer Tönung, mehr Kontrast oder größerer Schrift besser lesen? Wählen Sie Ihre Farben und Ihre Schrift, einmalig für alle Seiten.

Kostenlose Lektion

Klassen und Objekte in Python

Nach dieser Lektion: Ich kann ein Ding als Klasse mit Zustand und Verhalten modellieren.

Lektion, 55 Min.5 BefehleLab „Linux im Alltag“: die dreißig Befehle, die Entwickelnde auswendig tippen

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

BegriffWas er bedeutetBeispiel
Klasseder Bauplan für gleichartige Objekteclass Mensakarte:
Objektein einzelnes Ding, gebaut nach einer Klasse
Attributein Wert, den ein Objekt speichertself.guthaben_cent
Methodeeine Funktion, die zu einer Klasse gehört
Konstruktordie Methode __init__, die ein neues Objekt einrichtet
selfder 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

Code: python
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

SchrittAufrufguthaben_cent danachErgebnis
StartMensakarte("Mia", 500)500neues Objekt
1bezahlen(350)150True
2bezahlen(350)150False, das Guthaben reicht nicht
3aufladen(200)350kein 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

Code: python
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

Befehl
mkdir -p ~/oop-labor

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Hineingehen

Befehl
cd ~/oop-labor

Hier 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

Befehl
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.py

Hier 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

Befehl
python3 karte.py

Hier 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

Befehl
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.

Über dieses Lab und seinen Quellcode: Lab „Linux im Alltag“: die dreißig Befehle, die Entwickelnde auswendig tippen

Sie unterrichten eine Gruppe? Weisen Sie dieses Modul Ihren Studierenden zu, mit Handbuch für Lehrende, automatisch geprüften Aufgaben und einem Lab für jede Person.