Zum Hauptinhalt springen

Regeln im Objekt schützen

Problem

konto.stand = -1000 # unsinnig?
tier.hunger = -99

Besser: nur über Methoden ändern, die prüfen.

Beispiel

class Konto:
def __init__(self, stand=0):
self.stand = stand

def einzahlen(self, betrag):
if betrag <= 0:
print("Betrag muss positiv sein.")
return
self.stand = self.stand + betrag

def abheben(self, betrag):
if betrag <= 0:
print("Betrag muss positiv sein.")
return
if betrag > self.stand:
print("Nicht genug Guthaben.")
return
self.stand = self.stand - betrag

Rate mal!

Warum nicht alles frei setzen?

Auflösung

Damit Regeln (nicht negativ, Limits) zentral und sicher bleiben.

Probiere es selbst

Experiment 1

Hunger nie unter 0.

Experiment 2

Leben nie über 3.

Experiment 3

Fehlermeldung bei ungültigem Betrag.

Fehlerdetektiv

def abheben(self, betrag):
self.stand = self.stand - betrag

ohne Prüfung.

Hinweis

Negativer Stand möglich – Regeln ergänzen.

Übungen

Level 1

set_hunger nur 0–10.

Level 2

Konto einzahlen/abheben mit Regeln.

Level 3

Haustier: fuettern nur wenn hunger groesser 0.

Level-1-Lösung
class Tier:
def __init__(self):
self.hunger = 5

def set_hunger(self, wert):
if wert < 0 or wert > 10:
print("Ungueltig")
return
self.hunger = wert

Mini-Quiz

Mini-QuizWofuer sind Pruefungen in Methoden gut?

Schutz sitzt! Mini-Projekt: Virtuelles Haustier.