Kapitel 13
Verarbeitung von Zeichenketten
372
Erläuterung:
#1: Ende des Basistextes (Klassenattribut)
#2: Formatierung des Basistextes. Die Platzhalter werden durch Daten ersetzt.
#3: Zurückgegeben wird eine textuelle Repräsentation des Mahnbrief-Objektes.
Programmlauf:
13.3.4 Textuelle Repräsentation eines Objektes
Häufig möchte man komplexe Objekte durch einen Text beschreiben. Wenn in einer Klasse
eine
__str__()-Methode definiert ist, wird damit die Standardfunktion str() überschrieben,
und durch eine einfache
print()-Anweisung kann ein Objekt der Klasse auf dem Bildschirm
ausgegeben werden. Die Kunst besteht darin, in der
__str__()-Methode eine gut lesbare tex-
tuelle Repräsentation für die Objekte der Klasse zu finden. Im folgenden Skript definieren wir
eine Klasse
Analyse, die Ergebnisse chemischer Analysen von Mineralwasser modelliert. Das
Attribut
titel enthält den Titel der Analyse (String), und die Attribute anionen und katio-
nen
bezeichnen zwei Listen aus Tupeln. Jedes Tupel enthält den Namen einer Ionensorte und
die gemessene Konzentration. In der Methode
__str__() wird eine Tabelle mit den Analyse-
werten erstellt. Hier greifen wir tief in die Trickkiste der Formatierung.
v on= v o n,
b is= b i s) #2
def __str__(self):
r e turn s elf . tex t #3
# Hauptprogramm
personen = [('m', 'Sven', 'Januar', 'Mai'),
('w', 'Jenny', 'Februar', 'Juli')]
for g, n, v, b in personen:
print(Mahnung(g, n, v, b))
Lieber Sven,
dies soll keine Mahnung sein. Ich möchte dich nur daran
erinnern, dass du deine Clubbeiträge für die Monate
Januar bis Mai noch nicht bezahlt hast.
Bitte überweise sie umgehend auf das unten stehende Konto.
Mit freundlichen Grüßen
Tim (Kassenwart)
...
373
13.3
Automatische Textproduktion
Skript:
Erläuterung:
#1: Der Titel wird innerhalb eines Feldes von 40 Stellen zentriert.
#2: In der Zeile darunter wird – ebenfalls zentriert – ein Zeitstempel eingefügt.
#3: Tabellenüberschriften für eine zweispaltige Tabelle. Die Strings sind nach links ausge-
richtet und nehmen insgesamt 20 Stellen ein.
#4: Ein Strich aus 40 Minuszeichen
# analyse.py
from time import *
class Analyse:
def __init__(self, titel, anionen, kationen):
self.__titel = titel
self.__an = anionen
self.__kat = kationen
def __str__(self):
text = self.__titel.center(40)+'\n' #1
text += ('Datum: '+asctime()).center(40)+'\n\n' #2
text += 'Kationen (mg/l)'.ljust(20) #3
text += 'Anionen (mg/l)'.ljust(20)+'\n'
t e xt += 4 0*' - ' +'\ n ' #4
i = 0
while i<max(len(self.__an), len(self.__kat)): #5
if i<len(self.__kat):
text += "{k[0]} {k[1]})".format(
k=self.__kat[i]).ljust(20)
e l se: t e xt + = 20* ' '
if i<len(self.__an):
text += "{a[0]} ({a[1]})\n".format(a=self.__an[i])
else: text+=20*' '+'\n'
i + =1
return text
sprudel = Analyse('Analyse von Sprudelwasser',
[('Chlorid',40), ('Sulfat',38),
('Hydrogencarbonat', 1816)],
[('Natrium', 118), ('Kalium', 11),
('Magnesium', 108), ('Calcium', 348)])
print(sprudel)

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.