Lektion 24 von 35Python
Python · Lektion 24 · 35 Minuten
Klassen und Objekte
Das lernst du
- Mit
classeinen eigenen Bauplan für Objekte schreiben - Eigenschaften in
__init__festlegen und überselfbenutzen - Methoden schreiben, die ein Objekt verändern
Bauplan und Bauteil
Stell dir vor, du baust Roboter. Jeder Roboter hat einen Namen und einen Akkustand, und jeder kann fahren. Statt für jeden Roboter einzelne Variablen anzulegen, schreibst du einen Bauplan: eine Klasse. Aus dem Bauplan baust du dann beliebig viele Objekte.
class Hund:
def __init__(self, name, alter):
self.name = name
self.alter = alter
bello = Hund("Bello", 3)
luna = Hund("Luna", 7)
print(bello.name)
print(luna.alter)Klassennamen schreibt man groß (Hund, Roboter). Drück auf Schritte: Im Speicher siehst du zwei Objekte mit eigenen Werten.
init und self
__init__ (zwei Unterstriche vorne und hinten) läuft automatisch, wenn ein neues Objekt gebaut wird. Hier legst du die Eigenschaften fest.
self bedeutet „dieses Objekt hier“. self.name = name heißt: Speichere den Namen in diesem Objekt. Deshalb kann jeder Hund seinen eigenen Namen haben.
Methoden: Was ein Objekt kann
Funktionen innerhalb einer Klasse heißen Methoden. Sie bekommen immer self als ersten Parameter und können so die Eigenschaften des Objekts lesen und ändern:
class Konto:
def __init__(self, besitzer):
self.besitzer = besitzer
self.stand = 0
def einzahlen(self, betrag):
self.stand = self.stand + betrag
def anzeigen(self):
return f"{self.besitzer} hat {self.stand} €"
mein_konto = Konto("Mia")
mein_konto.einzahlen(20)
mein_konto.einzahlen(15)
print(mein_konto.anzeigen())Beim Aufruf mein_konto.einzahlen(20) gibst du self nicht mit – Python setzt automatisch das Objekt vor dem Punkt ein.
Merke: Eine Klasse ist der Bauplan, ein Objekt ist das gebaute Ding.
Hundist eine Klasse,belloist ein Objekt.
Warum das für Roboter wichtig ist
Wenn du später LEGO SPIKE programmierst, arbeitest du ständig mit Objekten: Ein Motor ist ein Objekt mit Methoden wie run_angle(), ein Sensor eins mit distance(). Jetzt weißt du, wie so etwas von innen aussieht.
Kurz-Check
Bevor es an die Aufgabe geht: Was gibt dieses Programm aus? Tipp deine Vermutung ein – Python rechnet danach nach.
class Hund:
def __init__(self, name):
self.name = name
self.tricks = 0
def lernen(self):
self.tricks += 1
bello = Hund("Bello")
bello.lernen()
bello.lernen()
print(bello.name, bello.tricks)Deine Aufgabe
Jetzt bist du dran
Vervollständige die Klasse Roboter. Ein neuer Roboter hat einen name und startet mit akku = 100. Die Methode fahren(meter) verbraucht pro 10 Meter 1 % Akku (also meter // 10), der Akku darf aber nie unter 0 fallen. Die Methode status() gibt einen Text zurück wie Robo: 95 % Akku.
class Roboter:
def __init__(self, name):
self.name = name
# Lege hier den Akku an
def fahren(self, meter):
# Verbrauche Akku
pass
def status(self):
# Gib den Status-Text zurück
pass
robo = Roboter("Robo")
robo.fahren(50)
print(robo.status())- Denkanstoß
Schreib in
__init__die Zeileself.akku=100. - Welcher Befehl hilft?
Pro 10 Meter 1
%– alsoself.akku=self.akku- meter//10.Prüfe nach dem Abziehen mit
if, ob der Akku kleiner als 0 ist, und setze ihn dann auf 0.status()soll den Text mitreturnzurückgeben (nicht mitprint), z. B.f"{self.name}: {self.akku} % Akku".Speichere den Akku mit
self.akkuim Objekt, nicht in einer Variablen außerhalb der Klasse. - Lückencode – ergänze die ___
class Roboter: def __init__(self, name): self.name = name self.akku = ___ def fahren(self, meter): self.akku = ___ if ___: self.akku = ___ def status(self): return ___ robo = Roboter("Robo") robo.fahren(50) print(robo.status())
Ohne Hinweise gelöst gibt es einen ⭐ auf deiner Fortschrittsseite.
Lösung anzeigen🔒 Erst nach allen Hinweisen oder 2 Prüf-Versuchen
Versuch es erst selbst – aus Fehlern lernt man am meisten. Hier ist eine mögliche Lösung:
class Roboter:
def __init__(self, name):
self.name = name
self.akku = 100
def fahren(self, meter):
self.akku = self.akku - meter // 10
if self.akku < 0:
self.akku = 0
def status(self):
return f"{self.name}: {self.akku} % Akku"
robo = Roboter("Robo")
robo.fahren(50)
print(robo.status())