319
Kapitel 11
Klassenbibliotheken in Modulen
speichern
Ein großer Vorteil der objektorientierten Programmierung ist die Wiederverwendbarkeit
von Klassen. Zum Beispiel die Klasse
Geld aus dem letzten Kapitel lässt sich entweder als
Basisklasse für verschiedene spezialisierte Klassen oder direkt in einem Skript, das Geld-
Objekte verarbeitet, einsetzen.
Damit eine Klasse von anderen Skripten verwendet werden kann, muss sie in einer eigenen
Datei als Modul abgespeichert und von den Skripten, die sie benutzen, importiert werden.
Von den Problemen, die damit verbunden sind, handelt dieses Kapitel.
Eine Klasse taugt nur dann etwas, wenn man sicher ist, dass sie fehlerfrei ist. Deshalb stel-
len wir in diesem Zusammenhang einige praktische Methoden zum Testen von Klassen vor.
11.1 Testen einer Klasse in einem lauffähigen
Stand-alone-Skript
Wir sind bisher davon ausgegangen, dass eine Klasse im interaktiven Modus des Python-
Interpreters definiert wird und dann durch irgendwelche direkt eingegebenen Anweisun-
gen getestet wird. Eine Alternative ist das folgende Verfahren zum Testen einer Klassen-
definition:
Schreiben Sie mit dem Editor (IDLE) die Klassendefinition(en) einschließlich eventuel-
ler
import-Anweisungen.
Fügen Sie als Hauptprogramm an das Ende des Skripts einige Programmzeilen an, in
denen Objekte der Klasse instanziiert werden und Methoden der Klasse aufgerufen
werden.
Speichern Sie das Skript ab und starten Sie es.
Als Beispiel nehmen wir die Klasse
Geld aus dem vorigen Kapitel.
Skript:
# geld.py
class Geld(object):
wechselkurs = {'USD':0.84998,
'GBP':1.39480,
'E U R ':1. 0 ,
'JPY':0.007168}
Kapitel 11
Klassenbibliotheken in Modulen speichern
320
def __init__(self, waehrung, betrag):
self.waehrung = waehrung
self.betrag = float(betrag)
def getEuro(self):
return self.betrag*self.wechselkurs[self.waehrung]
def __add__ (self, geld):
a = self.getEuro()
b = geld.getEuro()
faktor = 1.0/self.wechselkurs[self.waehrung]
summe = Geld (self.waehrung, (a+b)*faktor )
return summe
def __lt__(self, other):
a = self.getEuro ()
b = other.getEuro ()
return a < b
def __le__(self, other):
a = self.getEuro ()
b = other.getEuro ()
return a <= b
def __eq__(self, other):
a = self.getEuro ()
b = other.getEuro ()
return a == b
def __str__(self):
return self.waehrung + ' ' + format(self.betrag, '.2f')
# Hauptprogramm – Testumgebung
if __name__=='__main__': #1
eur100 = Geld('EUR',100)
usd100 = Geld('USD',100)
print('100 Euro: ', eur100)
print('100 EUR + 100 USD: ',eur100 + usd100)
print('100 EUR > 100 USD : ', eur100>usd100)
print('100 USD in Euro: ', usd100.getEuro())

Get Python 3 - Lernen und professionell anwenden now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.