Objektorientierte Programmierung
Objektorientierte Programmierung (OOP) ist eine Methode zum Schreiben von Programmen, bei der wir Dinge aus der realen Welt (wie Tiere, Gegenstände oder Benutzer) als "Objekte" betrachten. Jedes Objekt hat Eigenschaften (Instanzvariablen) und Dinge, die es tun kann (Methoden). Jedes Objekt ist Instanz einer Klasse — eine Klasse ist eine Art "Bauplan" für Objekte.
OOP hilft uns, Programme auf eine organisierte Weise zu schreiben, sodass wir sie einfacher verstehen, verändern und wiederverwenden können.
Klassen und Objekte

class Hund:
def __init__(self, name, fellfarbe):
self.name = name
self.fellfarbe = fellfarbe
def mach_wuff(self):
print("Wuff!!")
def sag_wie_du_heisst(self):
print("Ich heisse " + self.name + ".")
def sag_deine_fellfarbe(self, sprache):
if sprache == "de":
print("Mein Fell ist " + self.fellfarbe + ".")
elif sprache == "en":
print("My fur is " + self.fellfarbe + ".")
benno = Hund("Benno", "schwarz")
manu = Hund("Manu", "braun")
benno.mach_wuff()
benno.sag_wie_du_heisst()
benno.sag_deine_fellfarbe("de")
manu.mach_wuff()
manu.sag_wie_du_heisst()
manu.sag_deine_fellfarbe("en")
Dieses Programm produziert folgende Ausgabe:
Wuff!!
Ich heisse Benno.
Mein Fell ist schwarz.
Wuff!!
Ich heisse Manu.
My fur is braun.
Der Aufbau dieser Klasse
- Auf den Zeilen
1
-16
wird eine Klasse namensHund
definiert. - Die Klasse
Hund
hat einen Konstruktor (Zeilen2
-3
), der die Parameterself
,name
undfellfarbe
entgegennimmt.- Der Konstruktor ist eine spezielle Funktion, die in jeder Klasse existiert, und immer genau den Namen
__init__
hat. Er wird immer dann (automatisch) aufgerufen, wenn wir eine neue Instanz dieser Klasse erzeugen. Die Aufgabe des Konstruktors ist das Konstruieren dieser Instanz. Wir schreiben also alles in diese Funktion hinein, das wir beim Erzeugen einer neuen Instanz dieser Klasse erledigen müssen. Achtung: Wenn es bei einer Klasse mal nichts gibt, das wir im Konstruktor erledigen müssen, dann müssen wir ihn auch nicht hinschreiben. - Der spezielle Parameter
self
ermöglicht den Zugriff auf die jeweilige Instanz derHund
-Klasse. - Der Wert des Parameters
name
wird auf Zeile3
der Instanzvariableself.name
zugewiesen. - Der Wert des Parameters
fellfarbe
wird auf Zeile4
der Instanzvariableself.fellfarbe
zugewiesen.
- Der Konstruktor ist eine spezielle Funktion, die in jeder Klasse existiert, und immer genau den Namen
- Auf den Zeilen
6
-7
wird die Methodemach_wuff()
definiert.- Wenn eine Funktion zu einer Klasse gehört (also wie hier unter einem
class
eingerückt ist), dann nennen wir sie nicht Funktion, sondern Methode. - Jede Methode muss zwingend den speziellen Parameter self entgegennehmen — selbst dann, wenn er wie hier gar nicht benötigt wird.
- Wenn eine Funktion zu einer Klasse gehört (also wie hier unter einem
- Auf den Zeilen
9
-10
wird die Methodesag_wie_du_heisst()
definiert.- Auf Zeile
9
wird über den speziellen Parameterself
auf die Instanzvariableself.name
zugegriffen. - Die Ausgabe der Methode
sag_wie_du_heisst()
kann also für jede Instanz der KlasseHund
unterschiedlich sein. Er hängt davon ab, welchen Wert wir bei der Instanziierung dem Konstruktor für den Parametername
übergeben haben. Diesen Wert nennt man ein Konstruktor-Argument.
- Auf Zeile
- Auf den Zeilen
12
-16
wird die Methodesag_deine_fellfarbe()
definiert.- Nebst dem speziellen Parameter
self
nimmt diese Methode auf Zeile12
einen zweiten Parametersprache
entgegen. - Die Ausgabe dieser Methode ist also abhängig vom Wert der Instanzvariable
self.fellfarbe
und vom Wert für den Parametersprache
.
- Nebst dem speziellen Parameter
Die Instanzen von Hund
- Eine Klasse ist wie ein Bauplan.
- Aus einer Klasse können wir beliebig viele Instanzen erzeugen.
- Wenn wir eine Instanz einer Klasse erzeugen, dann instanziieren wir diese Klasse. Wir setzen also den Bauplan in die Tat um.
- Eine Instanz einer beliebigen Klasse nennt man allgemein auch ein Objekt.
- Auf Zeile
18
wird eine Instanz derHund
-Klasse mit den Konstruktor-Argumenten"Benno"
und"schwarz"
erzeugt.- Dabei wird als Erstes die Konstruktor-Funktion der
Hund
-Klasse ausgeführt.- Der Wert der Instanzvariable
self.name
hat in der Instanzbenno
den Wert"Benno"
. - Der Wert der Instanzvariable
self.fellfarbe
hat in der Instanzbenno
den Wert"schwarz"
.
- Der Wert der Instanzvariable
- Die resultierende Instanz wird der Variable
benno
zugewiesen. - Die Variable
benno
enthält nun also ein Objekt vom DatentypHund
— sprich, eine Instanz derHund
-Klasse. - Konzeptuell repräsentiert das Objekt
benno
einen schwarzen Hund namens Benno.
- Dabei wird als Erstes die Konstruktor-Funktion der
- Auf Zeile
19
wird eine Instanz derHund
-Klasse mit den Konstruktor-Argumenten"Manu"
und"braun"
erzeugt.- Dabei wird als Erstes die Konstruktor-Funktion der
Hund
-Klasse ausgeführt.- Der Wert der Instanzvariable
self.name
hat in der Instanzmanu
den Wert"Manu"
. - Der Wert der Instanzvariable
self.fellfarbe
hat in der Instanzmanu
den Wert"braun"
.
- Der Wert der Instanzvariable
- Die resultierende Instanz wird der Variable
manu
zugewiesen. - Die Variable
manu
enthält nun also ein Objekt vom DatentypHund
— sprich, eine Instanz derHund
-Klasse. - Konzeptuell repräsentiert das Objekt
manu
einen braunen Hund namens Manu.
- Dabei wird als Erstes die Konstruktor-Funktion der
- Auf den Zeilen
21
-23
wird das Objektbenno
verwendet.- Auf Zeile
21
wird die Methodemach_wuff()
auf dem Objektbenno
aufgerufen. Die Ausgabe istWuff!!
. - Auf Zeile
22
wird die Methodesag_wie_du_heisst()
auf dem Objektbenno
aufgerufen. Die Ausgabe istIch heisse Benno.
. - Auf Zeile
23
wird die Methodesag_deine_fellfarbe()
auf dem Objektbenno
mit dem Argument"de"
für den Parametersprache
aufgerufen. Die Ausgabe istMein Fell ist schwarz.
.
- Auf Zeile
- Auf den Zeilen
25
-27
wird das Objektbenno
verwendet.- Auf Zeile
25
wird die Methodemach_wuff()
auf dem Objektmanu
aufgerufen. Die Ausgabe istWuff!!
. - Auf Zeile
26
wird die Methodesag_wie_du_heisst()
auf dem Objektmanu
aufgerufen. Die Ausgabe istIch heisse Manu.
. - Auf Zeile
27
wird die Methodesag_deine_fellfarbe()
auf dem Objektmanu
mit dem Argument"en"
für den Parametersprache
aufgerufen. Die Ausgabe istMy fur is braun.
.
- Auf Zeile