Exkurs - Implementierung von Beziehungen in Python
Muster: Objekt der Klasse A kennt Objekt der Klasse B
Wir betrachten die Situation, dass ein Konto einen Inhaber hat.
Implementierung:
class Konto(object):
def __init__(self, nummer):
self.nr = nummer
self.stand = 0.0
self.inhaber = None
def einzahlen(self, betrag):
self.stand = self.stand + betrag
def auszahlen(self, betrag):
self.stand = self.stand - betrag
class Kunde(object):
def __init__(self, name, vorname):
self.name = name
self.vorname = vorname
Testprogramm:
from bank0 import *
# Erzeugung der Objekte
konto1 = Konto(5)
konto2 = Konto(11)
konto2.einzahlen(200.0)
kunde1 = Kunde("Müller", "Adriana")
kunde2 = Kunde("Meier", "Anatol")
konto1.inhaber = kunde2
konto2.inhaber = kunde1
# Ausgaben
print("Kontonummer: ", konto1.nr)
print("Inhaber(in): ", konto1.inhaber.vorname, konto1.inhaber.name)
print("Kontostand: ", konto1.stand)
print()
print("Kontonummer: ", konto2.nr)
print("Inhaber(in): ", konto2.inhaber.vorname, konto2.inhaber.name)
print("Kontostand: ", konto2.stand)
Muster: Objekt der Klasse A kennt Objekt der Klasse B und umgekehrt
Wir betrachten die Situation, dass ein Konto genau einen Inhaber hat und ein Kunde Zugriff auf genau ein Konto.
Implementierung:
class Konto(object):
def __init__(self, nummer):
self.nr = nummer
self.stand = 0.0
self.inhaber = None
def einzahlen(self, betrag):
self.stand = self.stand + betrag
def auszahlen(self, betrag):
self.stand = self.stand - betrag
class Kunde(object):
def __init__(self, name, vorname):
self.name = name
self.vorname = vorname
self.konto = None
Testprogramm:
from bank1 import *
# Erzeugung der Objekte
konto1 = Konto(5)
konto2 = Konto(11)
konto2.einzahlen(200.0)
kunde1 = Kunde("Müller", "Adriana")
kunde2 = Kunde("Meier", "Anatol")
konto1.inhaber = kunde2
konto2.inhaber = kunde1
kunde1.konto = konto2
kunde2.konto = konto1
# Ausgaben
print("Kunde:", kunde1.vorname, kunde1.name)
print("Konto:", kunde1.konto.nr)
print()
print("Kunde:", kunde2.vorname, kunde2.name)
print("Konto:", kunde2.konto.nr)
Muster: Objekt der Klasse A kennt mehrere Objekte der Klasse B
Wir betrachten die Situation, dass ein Konto genau einen Inhaber hat und ein Kunde Zugriff auf mehrere Kontos.
Implementierung:
class Konto(object):
def __init__(self, nummer):
self.nr = nummer
self.stand = 0.0
self.inhaber = None
def einzahlen(self, betrag):
self.stand = self.stand + betrag
def auszahlen(self, betrag):
self.stand = self.stand - betrag
class Kunde(object):
def __init__(self, name, vorname):
self.name = name
self.vorname = vorname
self.konten = []
def kontoHinzufuegen(self, konto):
self.konten = self.konten + [konto]
Testprogramm:
from bank2 import *
# Erzeugung der Objekte
konto1 = Konto(5)
konto2 = Konto(11)
konto2.einzahlen(200.0)
konto3 = Konto(19)
konto3.einzahlen(150.0)
konto4 = Konto(21)
konto4.auszahlen(50.0)
kunde1 = Kunde("Müller", "Adriana")
kunde2 = Kunde("Meier", "Anatol")
konto1.inhaber = kunde2
konto2.inhaber = kunde1
konto3.inhaber = kunde1
konto4.inhaber = kunde1
kunde1.kontoHinzufuegen(konto2)
kunde1.kontoHinzufuegen(konto3)
kunde1.kontoHinzufuegen(konto4)
kunde2.kontoHinzufuegen(konto1)
# Ausgaben
print("Kunde:", kunde1.vorname, kunde1.name)
print("Konten:")
for konto in kunde1.konten:
print("Kontonummer: ", konto.nr)
print("Kontostand: ", konto.stand)
print()
print("Kunde:", kunde2.vorname, kunde2.name)
print("Konten:")
for konto in kunde2.konten:
print("Kontonummer: ", konto.nr)
print("Kontostand: ", konto.stand)
Muster: Objekt der Klasse A erzeugt Objekte der Klasse B
Wir betrachten die Situation, dass eine Bank Kontos erzeugt.
Implementierung:
class Konto(object):
def __init__(self, nummer):
self.nr = nummer
self.stand = 0.0
self.inhaber = None
def einzahlen(self, betrag):
self.stand = self.stand + betrag
def auszahlen(self, betrag):
self.stand = self.stand - betrag
class Bank(object):
def __init__(self):
self.konten = []
self.naechsteKontoNr = 0
def kontoErzeugen(self):
konto = Konto(self.naechsteKontoNr)
self.konten = self.konten + [konto]
self.naechsteKontoNr = self.naechsteKontoNr + 1
Testprogramm:
from bank3 import *
from random import *
# Erzeugung der Objekte
bank = Bank()
for i in range(8):
bank.kontoErzeugen()
for konto in bank.konten:
konto.einzahlen(float(randint(0, 100)))
# Ausgaben
print("Konten:")
for konto in bank.konten:
print("Kontonummer: ", konto.nr)
print("Kontostand: ", konto.stand)