Python lernen · Schritt 9 von 14
Im MUD: Spieler und Engine sind Klassen

Python lernen · 03.09.2026

Python lernen: Klassen

Klassen bündeln Daten und Funktionen zu Objekten — die Blaupause für Helden, Monster und ganze Spielwelten. Mit Vererbung, Übungen und Quiz.

Bis jetzt lebten deine Daten lose herum: eine Variable fürs Gold, eine für die HP, eine Liste fürs Inventar. Klassen bündeln alles, was zusammengehört, zu einem Objekt — samt den Funktionen (Methoden), die damit arbeiten. Genau so ist Falkenmoor aufgebaut: Die Klasse Spieler hält Name, Inventar und Position, die Klasse Engine steuert das Spiel.

Vom Bauplan zum Objekt

class Held:
    def __init__(self, name, hp=30):
        self.name = name
        self.hp = hp

    def getroffen(self, schaden):
        self.hp -= schaden
        return self.hp

heldin = Held("Mirabel")
print(heldin.name, "hat noch", heldin.getroffen(7), "HP")

__init__ läuft automatisch beim Erstellen und baut das Objekt auf. self ist das jeweilige Objekt selbst — Python übergibt es heimlich als ersten Parameter, du schreibst es nur in die Definition. Die Blaupause kann beliebig oft gestanzt werden:

a = Held("Mirabel")
b = Held("Thorak", hp=40)

b.getroffen(10)
print(a.hp, b.hp)   # 30 30 — a merkt sich nichts von b's Schaden

Vererbung

Eine Klasse kann eine andere erweitern: Sie erbt alle Methoden und Attribute und fügt eigene hinzu. Mit super().__init__(...) ruft sie den Bauplan der Elternklasse auf:

class Magier(Held):
    def __init__(self, name, mana=50):
        super().__init__(name)
        self.mana = mana

    def zaubern(self):
        if self.mana >= 10:
            self.mana -= 10
            print(f"{self.name} schleudert einen Blitz!")

merlin = Magier("Merlin")
merlin.zaubern()
print(merlin.hp)        # vererbt: hp existiert auch hier

Warum Klassen?

  • Zusammengehöriges bleibt zusammen: HP und die Funktion, die HP verändert, wohnen im selben Objekt.
  • Wiederverwendbar: Ein Bauplan, beliebig viele Instanzen — Helden, Monster, Räume.
  • Erweiterbar: Vererbung erlaubt Varianten, ohne Bestehendes zu kopieren.

So übst du das

  • Waffenwerkstatt: Klasse Waffe mit Schaden und Haltbarkeit — jedes benutzen() mindert sie, bei 0 bricht sie.
  • Sparbuch: Klasse Konto mit einzahlen(), abheben() und Überziehungsschutz.
  • Monster-Zoo: Drei Monsterklassen mit unterschiedlichen Schadenswerten — alle erben von einer Basis-Klasse Kreatur.
  • Rückblick: Deine Funktionen aus Artikel 5 hätten sämtliche Werte als Parameter bekommen — Methoden finden ihre Daten über self selbst.

Übungen

Übung 1 — Rechteck-Klasse

Baue Rechteck mit den Attributen Breite und Höhe sowie den Methoden flaeche() und umfang().

Musterlösung zeigen
class Rechteck:
    def __init__(self, breite, hoehe):
        self.breite = breite
        self.hoehe = hoehe

    def flaeche(self):
        return self.breite * self.hoehe

    def umfang(self):
        return 2 * (self.breite + self.hoehe)

r = Rechteck(3, 4)
print(r.flaeche(), r.umfang())   # 12 14

Übung 2 — Das sichere Konto

Baue Konto mit Guthaben, einzahlen(betrag) und abheben(betrag) — abheben darf das Guthaben nie unter 0 sinken lassen (gib True/False für Erfolg zurück).

Musterlösung zeigen
class Konto:
    def __init__(self, stand=0):
        self.stand = stand

    def einzahlen(self, betrag):
        self.stand += betrag

    def abheben(self, betrag):
        if betrag > self.stand:
            return False
        self.stand -= betrag
        return True

k = Konto(20)
print(k.abheben(50))   # False
print(k.abheben(10))   # True

Übung 3 — Die vergängliche Waffe

Erweitere Waffe um Haltbarkeit: Jedes benutzen() senkt sie um 1; bei 0 gibt die Methode „Die Waffe ist zerbrochen!“ aus.

Musterlösung zeigen
class Waffe:
    def __init__(self, name, schaden, haltbarkeit=5):
        self.name = name
        self.schaden = schaden
        self.haltbarkeit = haltbarkeit

    def benutzen(self):
        if self.haltbarkeit <= 0:
            print("Die Waffe ist zerbrochen!")
            return
        self.haltbarkeit -= 1
        print(f"{self.schaden} Schaden (Haltbarkeit {self.haltbarkeit})")

Übung 4 — Vererbung im Zoo

Baue Kreatur (name, hp, lebt()) und leite Goblin ab — er schlägt zurück: konter(schaden) verringert seine HP.

Musterlösung zeigen
class Kreatur:
    def __init__(self, name, hp):
        self.name = name
        self.hp = hp

    def lebt(self):
        return self.hp > 0

class Goblin(Kreatur):
    def konter(self, schaden):
        self.hp -= schaden
        return self.lebt()

g = Goblin("Griknak", 15)
print(g.konter(20))   # False — er lebt nicht mehr

Quiz — Teste dich

Erst überlegen, dann aufklappen — so trainiert es am meisten!

  1. Was ist self?
  2. Wann genau läuft __init__?
  3. a = Held("A"); b = Held("B") — teilen sich a und b ihre HP?
  4. Was unterscheidet heldin.getroffen von heldin.getroffen(7)?
  5. class Magier(Held) — was bekommt Magier von Held?
Quiz-Lösungen anzeigen
  1. Das konkrete Objekt, auf dem die Methode gerade arbeitet — Python übergibt es heimlich als ersten Parameter.
  2. Beim Erstellen einer Instanz, also bei Held("Mirabel").
  3. Nein — jede Instanz hat eigene Attribute.
  4. Ohne Klammern ist es nur ein Verweis auf die Methode; erst die Klammern führen sie aus.
  5. Alle Methoden und Attribute von Held — plus alles, was Magier selbst definiert.

↩ Vorheriger Teil: Dictionaries

Weiter geht's mit dem nächsten Teil: NumPy-Arrays

Mehr aus der Kategorie „Python lernen“

← Zurück zum Lehrpfad