Kapitel 10
Definition eigener Klassen
308
10.9.3 Dokumentation von Klassen
Klassen können und sollten mit einem Dokumentationsstring versehen werden. Er besteht
normalerweise aus einer langen Zeichenkette (dreifache Anführungszeichen oder Hoch-
kommata), die über mehrere Zeilen geht, und ist nach folgendem Muster aufgebaut:
Die erste Zeile enthält eine Kurzbeschreibung der Aufgabe der Klasse.
Es folgt eine Leerzeile.
Die öffentlichen Methoden und Attribute werden aufgelistet und kurz beschrieben.
Wenn die Klasse von einer Basisklasse abgeleitet worden ist und ihr Verhalten hauptsäch-
lich von der Basisklasse geerbt ist, sollte dies erwähnt werden. Stellen Sie die Unterschiede
zur Basisklasse kurz dar und weisen Sie darauf hin, welche Methoden überschrieben wor-
den sind und welche Methoden Erweiterungen darstellen.
10.10 Typische Fehler
Versehentliches Erzeugen neuer Attribute
Beim schreibenden Zugriff auf ein Attribut führt ein falsch geschriebener Attributname
nicht zu einem Laufzeitfehler. Stattdessen wird dynamisch ein neues Attribut erzeugt. Dies
ist eine heimtückische Fehlerquelle. Betrachten Sie folgendes Beispiel, das in Zeile
#1 einen
kleinen Schreibfehler enthält:
Programmlauf:
Anstatt dass in Zeile
#1 etwas vom Wert des Attributs volumen abgezogen wird, erzeugt das
Skript ein neues Attribut
Volumen, dem die Differenz zugewiesen wird.
class Behaelter(object):
def __init__(self, volumen):
self.volumen = volumen # Volumen in Milliliter
# Hauptprogramm
tasse = Behaelter(250)
print('In der Tasse sind', tasse.volumen,'ml.')
ex = input('Wie viel wollen Sie ausschütten?')
tasse.Volumen = tasse.volumen - float(ex) #1
print('Neuer Inhalt:', tasse.volumen, 'ml')
In der Tasse sind 250 ml
Wie viel wollen Sie ausschuetten? 100
Neuer Inhalt: 250 ml
309
10.10
Typische Fehler
Verwechseln von Methoden und Attributen
Wenn man beim Aufruf einer Methode die Klammern weglässt, weil man glaubt, es handele
sich um ein Attribut, kommt es nicht zwangsläufig zu einem Laufzeitfehler. Denn das Sys-
tem liefert in diesem Fall als Antwort einen String, der das Methoden-Objekt beschreibt. So
kann es zu nur schwer auffindbaren logischen Fehlern kommen.
Beispiel:
Die folgende Klasse modelliert Rechtecke. Sie besitzt die beiden Attribute
laenge und
breite. Die Methode flaeche() berechnet die Fläche des Rechtecks. Entgegen den Konven-
tionen zur Namensgebung wurde die Methode durch ein Substantiv benannt und »klingt«
wie ein Attribut. Besser wäre ein Name wie
berechneFlaeche() oder getFlaeche() gewe-
sen. Dann besteht keine Verwechslungsgefahr.
Erläuterung:
Alle Anweisungen sind syntaktisch korrekt. Es gibt keinen Laufzeitfehler. Aber der Ver-
gleich (
#1) liefert ein unerwartetes Ergebnis. Der logische Fehler liegt darin, dass Klammern
vergessen wurden:
Die fehlenden Klammern bewirken, dass nicht die Methoden zur Flächenberechnung aufge-
rufen werden. Stattdessen werden hier die String-Repräsentationen der Methoden-Objekte
verglichen. Und die sind unterschiedlich.
Übrigens: Um herauszufinden, wie die Repräsentation eines Methoden-Objektes aussieht,
können Sie die folgende Anweisung ausprobieren:
>>> class Rechteck:
def __init__(self, laenge, breite):
self.laenge = laenge
self.breite = breite
def flaeche (self):
return self.laenge*self.breite
>>> a = Rechteck(2, 1)
>>> b = Rechteck(1, 2)
>>> a.flaeche == b.flaeche #1
False
>>> a.flaeche() == b.flaeche()
True
>>> print(a.flaeche)

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.