Instanzvariablen (auch Objektvariablen, Membervariablen oder Felder genannt) sind Variablen, die zu einem einzelnen Objekt gehören. Jedes Objekt einer Klasse besitzt seine eigene Kopie jeder Instanzvariable — der Zustand des einen Objekts ist dadurch unabhängig vom Zustand der anderen.

Ein Objekt, ein Zustand

Die Klasse ist der Bauplan, die Instanzvariable beschreibt, welche Daten ein Objekt trägt. Legt man zwei Konten an, hat jedes seinen eigenen Kontostand:

class Konto {
    private double kontostand;   // Instanzvariable: pro Konto-Objekt

    public Konto(double start) {
        this.kontostand = start; // this zeigt auf das aktuelle Objekt
    }
}

Verändert man kontoA.kontostand, bleibt kontoB.kontostand unberührt. Genau diese Eigenschaft macht Objekte zu eigenständigen Bausteinen.

Initialisierung im Konstruktor

Instanzvariablen werden typischerweise im Konstruktor initialisiert. Dabei hilft this / self, den Parameter vom gleichnamigen Feld zu unterscheiden (this.kontostand = kontostand). In Python weist man Instanzvariablen üblicherweise in __init__ über self zu:

class Konto:
    def __init__(self, start):
        self.kontostand = start   # Instanzvariable

Instanzvariable vs. lokale Variable

Eine lokale Variable lebt nur innerhalb einer Methode und ist nach deren Ende weg. Eine Instanzvariable gehört zum Objekt und existiert, solange das Objekt existiert. Für den Datentyp gelten dieselben Regeln wie bei jeder Variablen — entscheidend ist der Lebenszyklus.

Kapselung: privat halten

Instanzvariablen stehen zumeist hinter der Sichtbarkeit private und werden über Getter und Setter angesprochen. Das ist die Kapselung: Außenstehende sehen den Zustand nur kontrolliert, Invarianten lassen sich durchsetzen.

Der Gegenbegriff ist die Klassenvariable: Sie gehört nicht zum einzelnen Objekt, sondern zur Klasse und wird von allen Objekten geteilt.