Zu diesem Kapitel siehe Abbildung
.
In diesem Abschnitt geben wir die Schreibweise mit dem Pythonprompt auf und setzen voraus, dass bereits Module geschrieben werden, die aber erst im folgenden Kapitel beschrieben werden, da dies in den Aufbau der Sprache besser passt. Dennoch können Sie im Vorgriff das kurze Kapitel über Module lesen.
Eine Klasse ist nun lediglich nichts anderes mehr als die Möglichkeit, einen neuen Objekttyp bereitzustellen, bei dem die zu bearbeitenden Datenobjekte mit den »richtigen« Funktionen gekoppelt werden. Ohne die Arbeit mit Klassen gibt es zwischen den Objekten ein heilloses Durcheinander! Wir werden nun unser feld von jetzt an als eine solche Klasse einführen und alles was wir bisher geschrieben haben, entsprechend umsetzen.
Zunächst wird mit dem Schlüsselwort class der Name der Klasse festgelegt und dem Klassenobjekt zugewiesen. Da wir später unser Objekt wieder feld nennen wollen, darf die Klasse selbst nicht feld heissen, denn dieser Klassenname steht ja sozusagen für einen Objekttyp. Setzen wir also an:
Dieses Überschreiben erfolgt mit einer Funktion5.2, oder Methode, wie wir in Zukunft sagen werden, die den Namen __init__ tragen muss. Der Name wird mit zwei Unterstrichen begonnen und endet auch mit zwei Unterstrichen.
Es gibt nun noch eine letzte Sache zu beachten. Wenn wir später das Objekt feld vom Typ kfeld generieren wollen, so soll es den Datensatz data, der die schon bekannte verschachtelte Liste enthält, sowie alle bisher beschriebenen Funktionen input, output und start zur Verfügung stellen. Es soll natürlich aber auch möglich sein, noch weitere Objekte vom Type kfeld zu generieren, die ihr eigenes Innenleben haben. Daher wird sich im allgemeinen die Funktion feld.output() im Ergebnis von der Funktion sfeld.output() unterscheiden, wenn sfeld ein zweites kfeld-Objekt ist, das sein Eigenleben führt. Daher muss der Name des Objektes irgendwo im Objekt selbst gespeichert werden, damit keine Verwechselungen möglich sind. Jener Name, der innerhalb des Klassenobjektes auf den eigentlichen Namen des Klassenobjektes zeigt, heisst self.
Langer Rede kurzer Sinn, hier ist der Code:
#Erstellt ein 4x4 Spielfeld
def __init__ (self):
self.data[[0,0,0,0],[0,0,0,0],0,0,0,0],[0,0,0,0]]
def start(self):
for i in range(4):
for j in range(4):
self.data[i][j]=0
def input(self,a,b,c,d)
#Weist jeder Zeile die Werte a,b,c,d in dieser Reihenfolge zu.
#Gibt die mit dem Zeilenindex multiplizierten Summen
#der letzten beiden Zeilen zurück
suma=sumb=0
for i in range (4):
self.data[i]=[a,b,c,d]
if i==2:
for j in range(4):
suma=suma+i*self.data[i][j]
elif i==3:
for j in range(4):
sumb=sumb+i*self.data[i][j]
return (suma,sumb)
def output(self):
for in in range[i]:
print self.data[i]
print '\n'
Der Aufruf der input-Methode erfolgt jetzt über
Mit