Von primitiven Datentypen zu komplexen Datenstrukturen

Standard Datentypen alleine ungeschickt bzw. unzureichend für praktische Anwendungen, z.B. Studentendaten: Name, Studiengang, Alter, Semester, Matrikel-Nummer, Noten, ... Kombination aus string, int, float Daten.

In Python mittels einfachster Form von Klasse möglich solche Datenstrukturen selbst zu definieren:


class Stud: # dumb class
    pass

sta = Stud() # Erzeugung Variable vom typ Stud
sta.name = "Albert Unirock"
sta.fach = "Physik"
sta.alter = 25
...
stb = Stud() # Erzeugung Variable vom typ Stud
stb.name = "Berta Bohne"
stb.fach = "Informatik"
stb.alter = 19
...



Weiteres Beispiel: Klasse für einfachen Dreier-Vektor


class Dumb3Vec: # weitere leere  Klasse, nur Huelle fuer 3-er Vektoren
    pass  # empty statement, hier noetig

# Anwendung
v = Dumb3Vec() # Erzeugung Variable vom typ Dumb3Vec
w = Dumb3Vec() # Erzeugung Variable vom typ Dumb3Vec
v.x = 1.0
v.y = 0.5
v.z = -0.8
w.x = 1.5
w.y = -0.5
w.z = -2.8
...
// Laenge ausrechnen
len = math.sqrt(v.x*v.x + v.y*v.y + v.z*v.z )
u = Dumb3Vec()
# v und w addieren
u.x = v.x + w.x 
u.y = v.y + w.y 
u.z = v.z + w.z 
...


Anstatt gängige Operationen jedesmal wieder neu zu programmieren wäre es geschickt, wenn dies gleich die Klasse übernehmen könnte, d.h. Klassen nicht nur zum Definieren beliebiger Datenstrukturen sondern auch gleich Operationen bzw. Methoden mit diesen Daten


import math
class Smart3Vec: # Klasse fuer 3-er Vektoren mit Methoden
    x = 0  # default values
    y = 0
    z = 0
    def Length( self ):
        return(math.sqrt(self.x*self.x + self.y*self.y + self.z*self.z ))
    def Add( self,  a ):
        t = Smart3Vec()
        t.x = self.x + a.x
        t.y = self.y + a.y
        t.z = self.z + a.z
        return(t)

  # Anwendung
v = Smart3Vec()  # Erzeugung Variable vom typ Smart3Vec
w = Smart3Vec()  # Erzeugung Variable vom typ Smart3Vec
v.x = 1.0
v.y = 0.5
v.z = -0.8
w.x = 1.5
w.y = -0.5
w.z = -2.8

# v kann seine Laenge selbst ausrechnen ...
print (v.Length())
# ... und weiss auch wie es einen anderen Vektor addiert
u = v.Add(w)
print (u.Length())


\bgroup\color{dgreen}\ensuremath{\color{dgreen}{\Rightarrow}}\egroup Grundkonzept für Objektorientiertes Programmieren