Python Tutorial
- jetzt Python programmieren lernen

Klassen in Python

Nun starten wir mit Python und klassenorientierter Programmierung.

Wir definieren nun Klassen. Die Definition von Klassen muss vor dem Hauptprogramm erstellt werden.

Starten wir einfach:

Zum Festlegen einer Klasse in Python benötigen wir das Schlüsselwort class. Aus didaktischen Gründen basteln wir Autos – das liegt nicht daran, dass Autos irgendwie wichtig wären (in der aktuellen Diskussion zur Umwelt) sondern daran, dass sich jeder etwas unter Autos vorstellen kann und dies daher griffige Beispiele ergibt.

Wer mag, darf die folgenden Beispiele auch mit Fahrrädern oder was auch immer durchführen.

class BauPlanAuto:
	sitze = 4;
	farbe = "rot"

Innerhalb der Klasse können nun Funktionen definiert werden. Hier ist der erste Eintrag in der den runden Klammern immer die Angabe self:

class BauPlanAuto:
	sitze = 4;
	farbe = "rot"
	geschwindigkeit = 0
	def beschleunigen(self):
		print("Auto wird beschleunigt")

Zum Nutzen der Klasse muss eine Instanz der Klasse erstellt werden. Oder auf Deutsch: von unserem Bauplan erstellen wir eine Einheit, die wir entsprechend nutzen können. Durch unseren Bauplan hat unser Auto als Vorgabe 4 Sitze, eine Farbe als Eigenschaften und verfügt über verschiedene Methoden wie z. B. "beschleunigen", "entschleunigen" als besser gesagt bremsen.

Eine Instanz ist nichts anderes wie "eine abgeschlossene Einheit" vom lateinischen "instantia". Oder wer es vom Verständnis her anders besser versteht: ein Exemplar aus einer Menge gleichartiger Dinge.

Durch den Bauplan (Klasse) können wir nun beliebig viele Autos bauen – in der Form, wie wir diese brauchen.

Wir bauen uns nun einen Borgward (Autos, die es bis 1961 gab) – wer mag, kann auch die typischen Automarken bauen (aber wer will denn Schleichwerbung machen :))

class BauPlanAuto:
	sitze = 4;
	farbe = "rot"
	geschwindigkeit = 0
	def beschleunigen(self):
		print("Auto wird beschleunigt")
        
borgward = BauPlanAuto()
print(borgward.farbe)

Im obigen Beispiel wurde nun eine Instanz des Autos mit dem Namen "borgward" erstellt. Auf die vorhandenen Variablen können wir zugreifen und diese ausgeben lassen. Hier die Standardfarbe des Autos.

Wir können auch auf die Methoden der Klasse zugreifen, in dem wir über die Punktschreibweise die gewünschte Methode ansprechen. Wir wollen die Methode "beschleunigen()" ansprechen.

class BauPlanAuto:
	sitze = 4;
	farbe = "rot"
	geschwindigkeit = 0
	def beschleunigen(self):
		print("Auto wird beschleunigt")

borgward = BauPlanAuto()
print(borgward.farbe)
borgward.beschleunigen()

Als Ausgabe erhalten wir nun:

rot

Auto wird beschleunigt

Eigentlich wollen wir nun eigene Werte in die Klasse nach Erstellung einer Instanz für diese Instanz festlegen. Im Klartext, wir wollen unser Auto neu lackieren in der Farbe babyblau. Wie das funktioniert, im folgenden Kapitel.

Variablen in einer Instanz verändern/setzen

Wollen wir das Auto umlackieren, sprich dem Auto eine andere Farbe zuweisen, dann benötigen wir eine entsprechende Methode in der Klasse.

Wie wir eine Methode in einer Klasse festlegen, haben wir bereits im letzten Kapitel kennen gelernt. Allerdings haben wir keine Werte verändert. Legen wir als eine Methode "umlackieren" fest und übergeben die neue Farbe:

class BauPlanAuto:
	sitze = 4;
	farbe = "rot"
	geschwindigkeit = 0
	def beschleunigen(self):
		print("Auto wird beschleunigt")
	def umlackieren(self, neueFarbe):
		farbe = neueFarbe
		print("umlackieren des Autos in ", neueFarbe)

borgward = BauPlanAuto()
borgward.umlackieren("blau")
print(borgward.farbe)

Führen wir den Code aus. Als Rückgabe erhalten wir:

umlackieren des Autos in blau

rot

Irgendwie hat das nicht wirklich geklappt. Wir konnten zwar die Methode "umlackieren" aufrufen und wir waren auch definitiv in der Methode (daher die Rückmeldung "umlackieren des …") aber die neue Farbe können wir nicht abrufen.

Was ist passiert? Hier ist wieder der Gültigkeitsbereich von Variablen uns in die Quere gekommen. In der Methode "umlackieren" müssen wir noch ein self.farbe = neueFarbe setzen und nicht nur "farbe = neueFarbe".

Soll also eine Variable der Klasse vom Inhalt geändert werden, dann müssen wir self. und den Variablennamen schreiben.

class BauPlanAuto:
	sitze = 4;
	farbe = "rot"
	geschwindigkeit = 0
	def beschleunigen(self):
		print("Auto wird beschleunigt")
	def umlackieren(self, neueFarbe):
		self.farbe = neueFarbe
		print("umlackieren des Autos in: ", neueFarbe)
   
borgward = BauPlanAuto()
borgward.umlackieren("blau")
print(borgward.farbe)

Jetzt hat unsere Methode auch eine Wirkung und das Auto vergisst nicht sofort, dass es eine neue Farbe hat:

umlackieren des Autos in blau

grün