self in Python verstehen: Wozu dient es?
Stell dir vor, du schreibst deine erste Python-Klasse für ein kleines Projekt im Betrieb. Du willst ein Auto modellieren mit Eigenschaften wie Marke und Farbe. Du siehst überall `self` stehen - in der `__init__`-Methode, bei jeder Methode, die du schreibst. Und du fragst dich: Wozu Python self eigentlich? Genau das klären wir hier. Egal, ob du als Fachinformatiker deine erste Umschulung absolvierst, im Informatikstudium Objektorientierung lernst oder als Berufseinsteiger in ein Python-Projekt...
Von Marcel Schmidtpeter 16. Juli 2026
Stell dir vor, du schreibst deine erste Python-Klasse für ein kleines Projekt im Betrieb. Du willst ein Auto modellieren mit Eigenschaften wie Marke und Farbe. Du siehst überall `self` stehen - in der `__init__`-Methode, bei jeder Methode, die du schreibst. Und du fragst dich: Wozu Python self eigentlich? Genau das klären wir hier.
Egal, ob du als Fachinformatiker deine erste Umschulung absolvierst, im Informatikstudium Objektorientierung lernst oder als Berufseinsteiger in ein Python-Projekt startest - `self` wirst du ständig antreffen. Warum? Weil Python ohne `self` nicht weiß, zu welchem Objekt eine Methode gehört.
Was ist Python self?
`self` ist eine Referenz - also ein Verweis - auf die aktuelle Instanz einer Klasse. Es zeigt auf genau das Objekt, das gerade mit einer Methode arbeitet.
Stell dir vor, du hast eine Klasse `Auto` und erzeugst zwei Objekte: `mein_bmw` und `mein_audi`. Wenn du nun `mein_bmw.bremsen()` aufrufst, muss Python wissen: Bremsen soll das BMW-Objekt, nicht der Audi. Genau dafür ist `self` da. Es ist wie ein Namensschild, das sagt: "Ich bin gerade dieses eine Auto."
Kernidea: `self` verbindet eine Methode mit dem konkreten Objekt, auf dem sie aufgerufen wird. Ohne `self` hätte Python keine Zuordnung zwischen Methoden und Instanzdaten.
Wichtig: `self` ist KEIN eingebautes Keyword in Python, sondern eine Konvention. Theoretisch könntest du es nennen, wie du willst. Tu es aber NICHT - alle Python-Entwickler verwenden `self`. Wenn du etwas anderes nutzt, macht dich das sofort verdächtig. Die offizielle PEP 8 empfiehlt den Namen `self` ausdrücklich.
In anderen Sprachen wie Java oder C# übernimmt das Schlüsselwort `this` diese Rolle. Allerdings wird es dort oft implizit vom Compiler ergänzt. Python macht es explizit - du musst `self` selbst als ersten Parameter schreiben.
Warum braucht Python self überhaupt?
Python braucht `self`, weil es Methoden nicht automatisch an Instanzen bindet. Python ist eine dynamische Sprache und arbeitet viel mit expliziten Referenzen.
Bei einer normalen Funktion außerhalb einer Klasse gibt es kein `self`. Eine Funktion kennt nur ihre lokalen Variablen und ihre Parameter. Eine Methode innerhalb einer Klasse braucht aber Zugriff auf die Instanzdaten - also auf die Variablen, die zu diesem einen Objekt gehören.
Faustregel: Funktionen außerhalb von Klassen kommen ohne `self` aus. Methoden innerhalb von Klassen brauchen `self` zwingend, um auf Objektdaten zuzugreifen.
Vergleiche es mit einem Formular: Eine normale Funktion ist wie ein leeres Formular, das jeder ausfüllen kann. Eine Methode ist ein Formular, das bereits deinen Namen trägt - `self` ist dieser Name.
Wie funktioniert self in der __init__-Methode?
Die `__init__`-Methode (gesprochen: "Dunder-Init") ist der Konstruktor in Python. Er wird automatisch aufgerufen, wenn du ein neues Objekt erzeugst. Hier weist du über `self` die Anfangswerte zu.
class Auto:
def __init__(self, marke, farbe):
self.marke = marke
self.farbe = farbe
def beschreiben(self):
return f"Das Auto ist ein {self.marke} in {self.farbe}."
# Zwei Objekte erzeugen
mein_bmw = Auto("BMW", "blau")
mein_audi = Auto("Audi", "rot")
print(mein_bmw.beschreiben()) # Das Auto ist ein BMW in blau.
print(mein_audi.beschreiben()) # Das Auto ist ein Audi in rot.Beachte: `self.marke = marke` weist dem Instanzattribut `marke` den Wert des Parameters `marke` zu. Ohne das `self.`-Präfix wüsste Python nicht, dass du eine Objekteigenschaft meinst und nicht nur eine lokale Variable.
Was passiert im Hintergrund? Wenn du `mein_bmw.beschreiben()` schreibst, macht Python daraus im Prinzip `Auto.beschreiben(mein_bmw)`. Das Objekt `mein_bmw` wird automatisch als erstes Argument übergeben - und landet im Parameter `self`. Diese Mechanik ist der Grund, warum `self` immer der erste Parameter sein muss.
Wie nutzt du self bei Instanzattributen?
Instanzattribute sind Variablen, die zu einem konkreten Objekt gehören. Du definierst sie immer mit `self.attributname`. So trennt Python die Daten verschiedener Objekte sauber voneinander.
class Bankkonto:
def __init__(self, inhaber, kontostand):
self.inhaber = inhaber
self.kontostand = kontostand
def geld_einzahlen(self, betrag):
self.kontostand += betrag
return f"Neuer Kontostand: {self.kontostand} Euro"
konto_lisa = Bankkonto("Lisa", 500)
konto_max = Bankkonto("Max", 100)
print(konto_lisa.geld_einzahlen(200)) # Neuer Kontostand: 700 Euro
print(konto_max.kontostand) # 100 Euro - Max bleibt unberuehrt`self.kontostand` sorgt dafür, dass Lisas Einzahlung den Kontostand von Max nicht berührt. Jedes Objekt hat seinen eigenen Speicherbereich für seine Attribute.
Du kannst `self` auch verwenden, um andere Methoden derselben Klasse aufzurufen. Das ist wichtig, wenn Methoden zusammenarbeiten sollen:
class Bankkonto:
def __init__(self, inhaber, kontostand):
self.inhaber = inhaber
self.kontostand = kontostand
def ist_im_minus(self):
return self.kontostand < 0
def warnung_ausgeben(self):
if self.ist_im_minus(): # Methodenaufruf ueber self
return f"Achtung, {self.inhaber} ist im Minus!"
return "Alles in Ordnung."Ohne `self.ist_im_minus()` würde Python die Methode nicht finden - es sucht nur im lokalen Scope der Methode, nicht im Klassenkontext.
Python self vs. this in Java: Der Unterschied
Viele IT-Lernende kennen `this` aus Java oder C#. Beide Konzepte verweisen auf die aktuelle Instanz, aber die Umsetzung unterscheidet sich deutlich. Die offizielle Python-Dokumentation zu Klassen erklärt das Verhalten detailliert.
Aspekt | Python `self` | Java `this` |
Schlüsselwort? | Nein, nur Konvention | Ja, echtes Keyword |
Parameter in Signatur? | Ja, explizit als 1. Parameter | Nein, wird implizit übergeben |
Im Methodenaufruf? | Muss geschrieben werden | Optional, Compiler ergänzt es |
Andere Namen möglich? | Ja, aber stark abgeraten | Nein, `this` ist fest |
Für Umsteiger: Der größte Stolperstein ist, dass du `self` in der Parameterliste explizit notieren musst. Vergisst du es, gibt es einen `TypeError` - der Java-Compiler würde das automatisch korrigieren.
Praxisbeispiel: Eine komplette Schuelerverwaltung
Hier ein Beispiel, das du typischerweise in einem Schulprojekt, einer Umschulung oder im Informatikstudium sehen könntest - eine einfache Klassenverwaltung mit Noten:
class Schueler:
def __init__(self, name, alter):
self.name = name
self.alter = alter
self.noten = []
def note_hinzufuegen(self, note):
if 1 <= note <= 6:
self.noten.append(note)
return f"Note {note} fuer {self.name} eingetragen."
else:
return "Ungueltige Note."
def durchschnitt_berechnen(self):
if len(self.noten) == 0:
return 0
return sum(self.noten) / len(self.noten)
def zeugnis(self):
schnitt = self.durchschnitt_berechnen()
return f"Schueler: {self.name}, Durchschnitt: {schnitt:.1f}"
# Schueler anlegen und Noten verwalten
anna = Schueler("Anna", 17)
print(anna.note_hinzufuegen(2)) # Note 2 fuer Anna eingetragen.
print(anna.note_hinzufuegen(3)) # Note 3 fuer Anna eingetragen.
print(anna.zeugnis()) # Schueler: Anna, Durchschnitt: 2.5Hier siehst du, wie `self` überall auftritt: bei den Attributen (`self.name`, `self.noten`), beim Aufruf von Instanzmethoden (`self.durchschnitt_berechnen()`) und im Konstruktor. So hängen alle Methoden am selben Objekt zusammen und arbeiten mit dessen Daten.
Erkenntnis: Jede Methode, die über `self` auf andere Methoden oder Attribute zugreift, arbeitet immer mit den Daten des konkreten Objekts - niemals mit denen eines anderen.
Häufige Fehler beim Umgang mit self
Fehler 1: self in der Methodensignatur vergessen
Der häufigste Anfängerfehler: Du schreibst eine Methode, vergisst aber `self` als ersten Parameter.
# FALSCH
class Auto:
def __init__(marke):
print("Konstruktor ohne self")
# RICHTIG
class Auto:
def __init__(self, marke):
print("Konstruktor mit self")Python übergibt bei jedem Methodenaufruf automatisch die Instanz als erstes Argument. Vergisst du `self`, gibt es einen `TypeError`. Python versucht dann, das Objekt auf den ersten Parameter zu mappen, der den falschen Wert bekommt.
Fehler 2: Instanzattribut ohne self setzen
# FALSCH
class Auto:
def __init__(self, marke):
marke = marke # Nur lokale Variable, NICHT Instanzattribut!
def anzeigen(self):
return marke # NameError: 'marke' ist hier nicht definiert
# RICHTIG
class Auto:
def __init__(self, marke):
self.marke = marke # Jetzt ist es ein Instanzattribut
def anzeigen(self):
return self.markeOhne `self.`-Präfix existiert die Variable nur innerhalb von `__init__` und verschwindet danach. Das ist ein Klassiker bei IT-Einsteigern.
Fehler 3: self außerhalb der Klasse verwenden
# FALSCH
auto = Auto("VW")
print(self.marke) # NameError: 'self' existiert hier nicht
# RICHTIG
auto = Auto("VW")
print(auto.marke) # Zugriff ueber das Objekt`self` ist nur INNERHALB der Methoden gültig. Außerhalb der Klasse sprichst du immer über den Objektnamen zu (`auto.marke`).
Übungstipp: Baue deine eigene Klasse
Nimm dir 15 Minuten Zeit und baue eine Klasse `Smartphone`. Sie soll Attribute für `marke`, `akku` (als Zahl von 0 bis 100) und Methoden zum Laden und Entladen haben.
So prüfst du, ob du das Konzept verstanden hast:
Definiere `__init__` mit `self` und den Attributen
Schreibe eine Methode `aufladen(self, prozent)`, die den Akku erhöht
Schreibe eine Methode `status(self)`, die den Akkustand ausgibt
Erzeuge zwei Smartphones und teste, ob sich die Akkustände unabhängig verändern
Tipp: Wenn du nach dem Üben noch unsicher bist, hilft dir ein erfahrener Mentor oft mehr als jedes Tutorial. Bei study-it.education findest du individuelle Online-Nachhilfe genau für solche Themen.
FAQ: Häufige Fragen zu Python self
Kann ich self umbenennen?
Ja, theoretisch. `self` ist keine eingebaute Konstante, sondern eine Konvention. Du könntest `mich` oder `dies` schreiben - Python akzeptiert das. Aber tu es nicht. Die gesamte Python-Community nutzt `self`. Wenn du davon abweichst, macht dich das sofort verdächtig und dein Code wird schwerer lesbar.
Was passiert, wenn ich self weglasse?
Python wirft einen `TypeError`. Beim Aufruf von `objekt.methode(arg)` übergibt Python automatisch das Objekt als erstes Argument. Wenn die Methode keinen `self`-Parameter hat, passt die Anzahl der Argumente nicht.
Gibt es self auch bei statischen Methoden?
Nein. Statische Methoden (mit `@staticmethod`) haben gar keinen Verweis auf eine Instanz. Klassenmethoden (mit `@classmethod`) nutzen stattdessen `cls` als Verweis auf die Klasse selbst - nicht auf ein Objekt. Nur reguläre Instanzmethoden arbeiten mit `self`.
Ist Python self dasselbe wie this in Java?
Fast. Beide verweisen auf die aktuelle Instanz. Der Unterschied: In Java ist `this` ein echtes Keyword und der Compiler fügt es automatisch ein. In Python musst du `self` explizit als ersten Parameter schreiben. Konzeptionell ist die Idee aber dieselbe.
Wann brauche ich self nicht?
Bei normalen Funktionen außerhalb von Klassen gibt es kein `self`. Auch bei statischen Methoden innerhalb einer Klasse verzichtest du darauf. Sobald du aber mit Objekten und Instanzmethoden arbeitest, ist `self` Pflicht.
Fazit
Python self ist die Brücke zwischen einer Klasse und ihren konkreten Objekten. Ohne `self` wüsste Python nicht, welche Daten zu welchem Objekt gehören. Merke dir drei Dinge: `self` ist immer der erste Parameter in Instanzmethoden, `self` ist eine Konvention (kein echtes Keyword), und du greifst über `self.attribut` auf Instanzdaten zu.
Wenn du das einmal verstanden hast, erschließt sich dir ein Großteil der objektorientierten Programmierung in Python fast von selbst - egal ob im Azubi-Alltag, im Studium oder beim Berufseinstieg.
Wenn du bei Python oder anderen Programmiersprachen hängen bleibst, schau dir die Nachhilfeangebote bei study-it.education an. Eins-zu-Eins-Support bringt dich oft schneller weiter als stundenlanges Suchen.
Brauchst du jemand, der das mit dir durchgeht?
Statt nochmal lesen: 30 min mit einem Senior-Dev.
Kostenloses Erstgespräch buchen →
Stell dir vor, du schreibst deine erste Python-Klasse für ein kleines Projekt im Betrieb. Du willst ein Auto modellieren mit Eigenschaften wie Marke und Farbe. Du siehst überall `self` stehen - in der `__init__`-Methode, bei jeder Methode, die du schreibst. Und du fragst dich: Wozu Python self eigentlich? Genau das klären wir hier. Egal, ob du als Fachinformatiker deine erste Umschulung absolvierst, im Informatikstudium Objektorientierung lernst oder als Berufseinsteiger in ein Python-Projekt...
marcel.schmidtpeter@study-it.education →Mehr Lesestoff
Python Überladen Überschreiben: Der Unterschied erklärt
Lerne den Unterschied zwischen Überladen und Überschreiben in Python. Der einfache Guide für Azubis, Studenten und Berufseinsteiger.
Python Konstanten: So nutzt du sie als Azubi, Student & Einsteiger
Dieser Guide erklärt dir, wie du Konstanten in Python korrekt definierst und anwendest. Perfekt für IT-Einsteiger.