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-16wird eine Klasse namensHunddefiniert. - Die Klasse
Hundhat einen Konstruktor (Zeilen2-3), der die Parameterself,nameundfellfarbeentgegennimmt.- 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
selfermöglicht den Zugriff auf die jeweilige Instanz derHund-Klasse. - Der Wert des Parameters
namewird auf Zeile3der Instanzvariableself.namezugewiesen. - Der Wert des Parameters
fellfarbewird auf Zeile4der Instanzvariableself.fellfarbezugewiesen.
- Der Konstruktor ist eine spezielle Funktion, die in jeder Klasse existiert, und immer genau den Namen
- Auf den Zeilen
6-7wird die Methodemach_wuff()definiert.- Wenn eine Funktion zu einer Klasse gehört (also wie hier unter einem
classeingerü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-10wird die Methodesag_wie_du_heisst()definiert.- Auf Zeile
9wird über den speziellen Parameterselfauf die Instanzvariableself.namezugegriffen. - Die Ausgabe der Methode
sag_wie_du_heisst()kann also für jede Instanz der KlasseHundunterschiedlich 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-16wird die Methodesag_deine_fellfarbe()definiert.- Nebst dem speziellen Parameter
selfnimmt diese Methode auf Zeile12einen zweiten Parameterspracheentgegen. - Die Ausgabe dieser Methode ist also abhängig vom Wert der Instanzvariable
self.fellfarbeund 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
18wird 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.namehat in der Instanzbennoden Wert"Benno". - Der Wert der Instanzvariable
self.fellfarbehat in der Instanzbennoden Wert"schwarz".
- Der Wert der Instanzvariable
- Die resultierende Instanz wird der Variable
bennozugewiesen. - Die Variable
bennoenthält nun also ein Objekt vom DatentypHund— sprich, eine Instanz derHund-Klasse. - Konzeptuell repräsentiert das Objekt
bennoeinen schwarzen Hund namens Benno.
- Dabei wird als Erstes die Konstruktor-Funktion der
- Auf Zeile
19wird 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.namehat in der Instanzmanuden Wert"Manu". - Der Wert der Instanzvariable
self.fellfarbehat in der Instanzmanuden Wert"braun".
- Der Wert der Instanzvariable
- Die resultierende Instanz wird der Variable
manuzugewiesen. - Die Variable
manuenthält nun also ein Objekt vom DatentypHund— sprich, eine Instanz derHund-Klasse. - Konzeptuell repräsentiert das Objekt
manueinen braunen Hund namens Manu.
- Dabei wird als Erstes die Konstruktor-Funktion der
- Auf den Zeilen
21-23wird das Objektbennoverwendet.- Auf Zeile
21wird die Methodemach_wuff()auf dem Objektbennoaufgerufen. Die Ausgabe istWuff!!. - Auf Zeile
22wird die Methodesag_wie_du_heisst()auf dem Objektbennoaufgerufen. Die Ausgabe istIch heisse Benno.. - Auf Zeile
23wird die Methodesag_deine_fellfarbe()auf dem Objektbennomit dem Argument"de"für den Parameterspracheaufgerufen. Die Ausgabe istMein Fell ist schwarz..
- Auf Zeile
- Auf den Zeilen
25-27wird das Objektbennoverwendet.- Auf Zeile
25wird die Methodemach_wuff()auf dem Objektmanuaufgerufen. Die Ausgabe istWuff!!. - Auf Zeile
26wird die Methodesag_wie_du_heisst()auf dem Objektmanuaufgerufen. Die Ausgabe istIch heisse Manu.. - Auf Zeile
27wird die Methodesag_deine_fellfarbe()auf dem Objektmanumit dem Argument"en"für den Parameterspracheaufgerufen. Die Ausgabe istMy fur is braun..
- Auf Zeile