Wie professioneller Code aussieht, wenn er nicht in einer langen Datei lebt.
Grundlagen 13 min Einsteiger 26. April 2026
Du verwendest Objekte, seit du deine erste Zeile Python geschrieben hast. "Hallo" ist ein Objekt der Klasse str, [1, 2, 3] ist ein Objekt der Klasse list, und jedes Mal, wenn du .append() oder .upper() aufgerufen hast, hast du eine Methode auf einem Objekt ausgeführt. Objektorientierte Programmierung (OOP) ist das System dahinter: Es bündelt Daten und die Operationen, die zu ihnen gehören, in wiederverwendbare Einheiten.
Wenn du PyTorch, Hugging Face oder scikit-learn öffnest, ist alles, womit du arbeitest — Modelle, Tokenizer, Optimierer — ein Objekt, das aus einer Klasse erstellt wurde. OOP zu verstehen verwandelt kryptische Bibliotheksdokumentation in etwas, das du tatsächlich lesen kannst.
Die Klasse: Ein Bauplan für Objekte
Klasse
AnalogieDefinition
Eine Klasse ist wie der Bauplan eines Autoherstellers für ein bestimmtes Modell. Der Bauplan legt fest, dass jedes Auto eine Farbe, eine Motorleistung und eine Fahrgestellnummer hat — und dass jedes Auto beschleunigen und bremsen kann. Aber der Bauplan selbst fährt nicht — er beschreibt nur, was die Autos können werden, die nach ihm gebaut werden.
Analogie:
Eine Klasse ist wie der Bauplan eines Autoherstellers für ein bestimmtes Modell. Der Bauplan legt fest, dass jedes Auto eine Farbe, eine Motorleistung und eine Fahrgestellnummer hat — und dass jedes Auto beschleunigen und bremsen kann. Aber der Bauplan selbst fährt nicht — er beschreibt nur, was die Autos können werden, die nach ihm gebaut werden.
Definition:
Eine Klasse ist eine Vorlage, die mit dem Schlüsselwort class definiert wird. Sie legt die Struktur (Attribute) und das Verhalten (Methoden) fest, die jede Instanz haben wird. __init__ wird automatisch bei der Objekterstellung aufgerufen und richtet den Anfangszustand ein. self verweist auf das konkrete Objekt.
Die Bauplan-Analogie bricht an drei Stellen: (1) Software-Klassen können von anderen Klassen erben — physische Baupläne nicht. (2) Python-Objekte können zur Laufzeit neue Attribute bekommen — als würde ein Auto plötzlich Flügel wachsen. (3) Ein neues Software-Objekt zu erstellen kostet fast nichts, ein neues Auto zu bauen ist teuer.
Wie ein Objekt entsteht
1
Code erreicht Hund("Bello", "Labrador")
2
Python erstellt ein leeres Objekt im Speicher
3
Python ruft __init__(neues_objekt, "Bello", "Labrador") auf
4
self.name = "Bello" und self.rasse = "Labrador" werden gesetzt
5
Fertiges Objekt wird zurückgegeben und in mein_hund gespeichert
Beispiel: Eine Hund-Klasse
class Hund:
def __init__(self, name, rasse):
self.name = name # Attribut
self.rasse = rasse # Attribut
def bellen(self): # Methode
print(f"Wuff! Ich bin {self.name}")
mein_hund = Hund("Bello", "Labrador")
mein_hund.bellen() # Ausgabe: Wuff! Ich bin Bello
class definiert den Bauplan. __init__ richtet jedes neue Objekt ein. self verweist immer auf das konkrete Objekt, das gerade erstellt oder verwendet wird. Attribute (self.name) speichern Daten am Objekt. Methoden (bellen) definieren das Verhalten.
Häufiger Fehler: self vergessen
Wenn du self in der Methodensignatur vergisst, bekommst du eine verwirrende Fehlermeldung. Python übergibt das Objekt automatisch als erstes Argument — ohne self erwartet die Methode null Argumente, bekommt aber eines.
class Hund:
def bellen(): # self fehlt!
print("Wuff!")
mein_hund = Hund()
mein_hund.bellen()
# TypeError: bellen() takes 0 positional
# arguments but 1 was given
Das Objekt: Eine lebendige Instanz
Objekt
AnalogieDefinition
Wenn die Klasse "VW Golf" (das Modell) ist, dann ist das Objekt der konkrete rote Golf vor deinem Haus mit 23.456 km auf dem Tacho und einem Kratzer an der linken Tür. Fünf Golfs aus derselben Fabrik sind fünf unabhängige Objekte, die denselben Bauplan teilen, aber unterschiedlichen Kilometerstand, verschiedene Schäden und verschiedene Besitzer haben.
Analogie:
Wenn die Klasse "VW Golf" (das Modell) ist, dann ist das Objekt der konkrete rote Golf vor deinem Haus mit 23.456 km auf dem Tacho und einem Kratzer an der linken Tür. Fünf Golfs aus derselben Fabrik sind fünf unabhängige Objekte, die denselben Bauplan teilen, aber unterschiedlichen Kilometerstand, verschiedene Schäden und verschiedene Besitzer haben.
Definition:
Ein Objekt ist eine konkrete Instanz einer Klasse — ein reales Gebilde im Speicher mit eigener Identität, eigenem Typ und eigenem Zustand. Instanziierung ist der Vorgang, ein Objekt zu erstellen, indem man den Klassennamen wie eine Funktion aufruft. Von einer Klasse können beliebig viele Objekte existieren, jedes mit eigenen Attributwerten.
Die Auto-Analogie bricht, weil: (1) Software-Objekte am Programmende zerstört werden — echte Autos bleiben physisch bestehen. (2) Objekte können ihre eigene Klasse abfragen (type(hund1)), während Autos ihren Bauplan nicht "kennen". (3) Objekte können trivial kopiert werden — einen perfekten Auto-Klon zu erstellen ist unmöglich.
Klasse (Bauplan)
Definiert Struktur und Verhalten. Handelt nicht selbst. Hund beschreibt, was Hunde können — aber Hund bellt nicht.
Objekt (Instanz)
Hat eigene Daten und führt Methoden aus. mein_hund hat den Namen "Bello" und kann bellen().
Instanz-Unabhängigkeit
hund1 = Hund("Bello", "Labrador")
hund2 = Hund("Rex", "Schäferhund")
print(hund1.name) # Bello
print(hund2.name) # Rex
hund1.name = "Wuffi"
print(hund1.name) # Wuffi
print(hund2.name) # Rex (unverändert!)
Jedes Objekt hat seine eigenen Attributwerte. hund1.name zu ändern hat keinen Einfluss auf hund2.name — sie sind unabhängige Kopien des Bauplans. Das ist das Kernprinzip: Objekte teilen die Struktur, aber nicht die Daten.
Warum OOP in jeder KI-Bibliothek steckt
Die drei großen KI-Bibliotheken — PyTorch, Hugging Face Transformers und scikit-learn — sind komplett auf Klassen und Objekten aufgebaut. Du musst keine eigenen Klassen schreiben, um KI zu nutzen — aber du musst verstehen, dass du Objekte verwendest und Methoden auf ihnen aufrufst.
P
PyTorch
Jedes Modell erbt von nn.Module. Die Klasse definiert Schichten in __init__ und Datenfluss in forward(). model = nn.Linear(10, 5) erstellt ein Objekt mit .weight und .bias Attributen.
H
Hugging Face
GPT2Model.from_pretrained("gpt2") ist eine Klassenmethode, die ein Objekt erstellt und vortrainierte Gewichte lädt. Das Objekt kann dann wie eine Funktion aufgerufen werden: model(**inputs).
S
scikit-learn
clf = DecisionTreeClassifier() erstellt ein Objekt. clf.fit(X, y) trainiert es — der gelernte Zustand wird im Objekt gespeichert. clf.predict(X_test) nutzt diesen Zustand für Vorhersagen.
Das Muster ist überall gleich: import macht die Klasse verfügbar, der Konstruktor (oder eine Factory-Methode) erstellt ein Objekt, und Methodenaufrufe nutzen oder verändern den Zustand des Objekts. Wenn du .fit(), .predict() oder .forward() liest, liest du Methodenaufrufe auf Objekten.
Nicht alles braucht eine Klasse
OOP zu verstehen heißt nicht, alles in Klassen zu packen. Einfache Skripte funktionieren perfekt mit Funktionen. Verwende Klassen, wenn du wiederverwendbare, zustandsbehaftete Einheiten brauchst — nicht als Selbstzweck.
Deep Dive: Klassen- vs. Instanz-Attribute
Attribute, die direkt in der Klasse definiert werden (außerhalb von __init__), werden von allen Instanzen geteilt. Attribute, die in __init__ über self gesetzt werden, gehören dem einzelnen Objekt.
class Hund:
art = "Canis lupus familiaris" # Klassenattribut
def __init__(self, name):
self.name = name # Instanzattribut
hund1 = Hund("Bello")
hund2 = Hund("Rex")
print(hund1.art) # Canis lupus familiaris
print(hund2.art) # Canis lupus familiaris (geteilt!)
print(hund1.name) # Bello (individuell)
Vorsicht bei veränderbaren Klassenattributen! Eine Liste als Klassenattribut wird von allen Instanzen geteilt — Änderungen durch ein Objekt betreffen alle anderen. Faustregel: Veränderbare Daten (Listen, Dictionaries) immer in __init__ als Instanzattribute definieren.
Deep Dive: Vererbung — Auf den Schultern von Giganten
class MeinModell(nn.Module) bedeutet: MeinModell IST ein nn.Module mit zusätzlichen Funktionen. Das Kind erbt alle Methoden und Attribute des Elternteils und kann eigene hinzufügen oder vorhandene überschreiben.
import torch.nn as nn
class MeinModell(nn.Module):
def __init__(self):
super().__init__() # Eltern-Init aufrufen
self.schicht = nn.Linear(10, 5)
def forward(self, x):
return self.schicht(x)
So funktioniert jedes benutzerdefinierte PyTorch-Modell. Vererbung, Polymorphismus und Methodenüberschreibung werden in späteren Artikeln ausführlich behandelt.
Interaktiv: Die OOP-Landkarte
Klicke auf die Konzepte in der Concept Map, um ihre Verbindungen zu erkunden. Beobachte, wie Klasse und Objekt zusammenhängen, wie Methoden und Attribute definiert und genutzt werden — und wo Vererbung ins Spiel kommt. Achte besonders darauf, wie viele Verbindungen von der Klasse ausgehen.
👆Klicke auf einen Begriff, um mehr zu erfahren. Die Linien zeigen, wie die Konzepte zusammenhängen.
Klicke auf einen Kreis, um Details zu sehen.
Legende
Klasse
Objekt
Methode
Attribut
Vererbung
Das Wichtigste auf einen Blick
Eine Klasse ist ein Bauplan: Sie definiert, welche Attribute (Daten) und Methoden (Verhalten) jede Instanz haben wird — aber sie ist selbst kein Objekt im Alltagssinn.
Ein Objekt ist eine lebendige Instanz einer Klasse. Du erstellst es, indem du den Klassennamen wie eine Funktion aufrufst: mein_hund = Hund("Bello", "Labrador").
Jedes Objekt hat eigene Attributwerte. hund1.name zu ändern beeinflusst hund2.name nicht — sie sind unabhängige Kopien des Bauplans.
__init__ richtet den Anfangszustand eines neuen Objekts ein. self verweist auf das konkrete Objekt, das gerade erstellt oder verwendet wird. Beides sind Konventionen, keine Magie.
KI-Bibliotheken (PyTorch, Hugging Face, scikit-learn) sind auf Klassen und Objekten aufgebaut. .fit(), .predict() und .forward() als Methodenaufrufe auf Objekten zu lesen ist der Schlüssel zur Nutzung.
Quiz: Objektorientierte Programmierung
Frage 1 / 4
Noch offen
Was ist der Unterschied zwischen einer Klasse und einem Objekt?
1. Was ist der Unterschied zwischen einer Klasse und einem Objekt?
☐ A) Eine Klasse ist ein konkretes Objekt im Speicher
☐ B) Eine Klasse ist ein Bauplan, ein Objekt ist eine Instanz dieses Bauplans
☐ C) Ein Objekt definiert die Methoden, eine Klasse nutzt sie
☐ D) Klasse und Objekt sind dasselbe
2. Was passiert bei diesem Code?
class Hund:
def bellen():
print("Wuff!")
mein_hund = Hund()
mein_hund.bellen()
☐ A) "Wuff!" wird ausgegeben
☐ B) SyntaxError
☐ C) TypeError: bellen() takes 0 positional arguments but 1 was given
☐ D) NameError: Hund is not defined
3. hund1 = Hund("Bello"); hund2 = Hund("Rex"); hund1.name = "Wuffi". Was ist hund2.name?
☐ A) "Wuffi"
☐ B) "Rex"
☐ C) None
☐ D) Fehler
4. Du liest: clf = DecisionTreeClassifier(); clf.fit(X, y); clf.predict(X_test). Was beschreibt das am besten?
☐ A) Drei unabhängige Funktionsaufrufe
☐ B) Ein Objekt wird erstellt, dann werden Methoden auf diesem Objekt aufgerufen
☐ C) Drei verschiedene Objekte werden erstellt
☐ D) Vererbung von drei Klassen
Auflösung: 1) B · 2) C · 3) B · 4) B
Checkpoint: Teste dein Wissen
Was ist der Unterschied zwischen einer Klasse und einem Objekt? Beim Hund-Beispiel mit mein_hund = Hund("Bello", "Labrador") — was ist die Klasse und was das Objekt?
Können zwei Objekte derselben Klasse unterschiedliche Attributwerte haben? Erkläre am Beispiel, warum hund1.name = "Wuffi" das Attribut von hund2 nicht verändert.
Wenn du model = GPT2Model.from_pretrained("gpt2") schreibst: Welche Rolle spielen import, die Klassendefinition und das resultierende model-Objekt jeweils?