20% Rabatt mit Code ERSTIS26
5 min Lesezeit 16. Juli 2026

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...

Marcel Schmidtpeter Von Marcel Schmidtpeter 16. Juli 2026
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 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.

python
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.

python
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:

python
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:

python
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.5

Hier 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.

python
# 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

python
# 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.marke

Ohne `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

python
# 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:

  1. Definiere `__init__` mit `self` und den Attributen

  2. Schreibe eine Methode `aufladen(self, prozent)`, die den Akku erhöht

  3. Schreibe eine Methode `status(self)`, die den Akkustand ausgibt

  4. 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.


Passende Nachhilfe

1:1-Hilfe zu diesem Thema?

Erstgespräch · 0 € · 30 min

Brauchst du jemand, der das mit dir durchgeht?

Statt nochmal lesen: 30 min mit einem Senior-Dev.

Kostenloses Erstgespräch buchen →
Über den Autor
Marcel Schmidtpeter
Marcel Schmidtpeter

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 →
Weiterlesen

Mehr Lesestoff