python
class Konto:
"""Ein einfaches Bankkonto."""
zinssatz = 0.01 # Klassenattribut: gehört allen Konten gemeinsam
def __init__(self, inhaber, stand=0.0):
self.inhaber = inhaber # Instanzattribut: gehört diesem Konto
self.stand = stand
def einzahlen(self, betrag):
if betrag <= 0:
raise ValueError('Betrag muss positiv sein')
self.stand += betrag
def abheben(self, betrag):
if betrag > self.stand:
raise ValueError('Nicht genug Guthaben')
self.stand -= betrag
def __str__(self):
return f'{self.inhaber}: {self.stand:.2f} Euro'
k = Konto('Anna', 100) # erzeugt ein Objekt (Instanz)
k.einzahlen(50)
k.abheben(30)
print(k) # Anna: 120.00 Euro
print(k.stand) # 120
Zeile für Zeile:
class Konto:definiert die Klasse. Der Name wird per Konvention inCamelCasegeschrieben.__init__ist der Konstruktor. Python ruft ihn automatisch auf, wenn duKonto(...)schreibst. Die Parameter nachselfsind die Argumente des Aufrufs.selfist das Objekt selbst. Es steht in jeder Methode als erster Parameter und wird beim Aufruf automatisch eingesetzt:k.einzahlen(50)entsprichtKonto.einzahlen(k, 50). In C wäreselfder Zeiger auf diestruct, den du jeder Funktion mitgibst.self.stand = standlegt ein Attribut am Objekt an. Es gibt keine Deklaration der Attribute vorab, sie entstehen durch Zuweisung (in__init__).raise ValueError(...)bricht die Methode mit einem Fehler ab. Wie man Fehler behandelt, lernst du im nächsten Kapitel. Hier genügt:raiselöst einen Fehler aus.__str__bestimmt, wasprint(k)oderstr(k)ausgibt.