20% Rabatt mit Code ERSTIS26
4 min Lesezeit 07. Juli 2026

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.

Marcel Schmidtpeter Von Marcel Schmidtpeter 07. Juli 2026
Python Überladen Überschreiben: Der Unterschied erklärt

Stell dir vor, du programmierst eine Klasse und möchtest eine Methode einmal mit einem Parameter und einmal mit zwei Parametern aufrufen. In Java oder C# kein Problem - du definierst einfach zwei Methoden mit gleichem Namen. In Python? Da passiert etwas völlig anderes. Genau hier beginnt der Unterschied zwischen Python Überladen Überschreiben - zwei Konzepten, die IT-Auszubildende, Studenten und Berufseinsteiger regelmäßig verwirren.

Wer aus der Java-Welt kommt, sollte sich unbedingt den Vergleich zu anderen Sprachen ansehen, denn Python geht hier aufgrund seiner dynamischen Natur andere Wege. Wir klären auf, was genau hinter den Begriffen steckt und wie du sie richtig anwendest.

Was ist Methodenüberladen (Overloading) in Python?

Methodenüberladen bedeutet eigentlich: Du definierst mehrere Methoden mit demselben Namen, aber einer unterschiedlichen Anzahl oder Art von Parametern (den Eingabewerten). In vielen Programmiersprachen ist das Standard, um gleiche Funktionalität für verschiedene Datentypen anzubieten.

Python unterstützt dieses Konzept jedoch NICHT auf nativem Weg.

Warum? Weil Python dynamisch typisiert ist. Das bedeutet, Python erkennt den Typ einer Variablen erst zur Laufzeit, während du den Code schreibst. Wenn du versuchst, zwei Methoden mit demselben Namen in einer Klasse zu definieren, "gewinnt" einfach die letzte Definition. Die vorherige wird überschrieben.

Merke: Python kennt kein echtes Methodenüberladen wie Java oder C#. Wer zwei Methoden mit gleichem Namen definiert, überschreibt die vorherige Definition.

Stell dir das vor wie ein Formular: Anstatt verschiedene Versionen desselben Formulars für verschiedene Fälle anzubieten (wie in Java), gibt Python dir in der Regel ein einziges, flexibles Formular.

Wie simuliert man Überladen in Python?

Da es kein natives Überladen gibt, nutzen Python-Entwickler Tricks, um das gleiche Ergebnis zu erreichen. Das macht den Code oft sogar lesbarer.

Nutzung von Standardwerten (Default-Parameter)

Der einfachste Weg ist das Festlegen von Standardwerten. So kann ein Parameter optional werden:

python
class Rechner:
    def addiere(self, a, b=0, c=0):
        # b und c haben Standardwerte (0)
        # dadurch kann man 1, 2 oder 3 Werte uebergeben
        return a + b + c


r = Rechner()
print(r.addiere(5))  # Ausgabe: 5
print(r.addiere(5, 3))  # Ausgabe: 8
print(r.addiere(5, 3, 2))  # Ausgabe: 10

Variable Parameterlisten (*args und **kwargs)

Eine mächtige Alternative sind `*args` (für eine beliebige Anzahl an Positional Arguments) und `**kwargs` (für Schlüsselwort-Argumente). `*args` sammelt alle übergebenen Werte in einem Tupel:

python
class Rechner:
    def addiere(self, *zahlen):
        # *zahlen sammelt alle uebergebenen Werte in ein Tupel
        ergebnis = 0
        for z in zahlen:
            ergebnis += z
        return ergebnis


r = Rechner()
print(r.addiere(1, 2, 3))  # Ausgabe: 6
print(r.addiere(1, 2, 3, 4, 5))  # Ausgabe: 15

Typbasiertes Überladen (Single Dispatch)

Falls du wirklich unterschiedliche Logik für verschiedene Typen benötigst (z.B. eine Funktion, die sich anders verhält, wenn sie einen `int` oder einen `str` erhält), bietet Python das Modul `functools` an. Das ist jedoch eher fortgeschritten und nicht der Standardweg für Anfänger. Mehr dazu findest du in der offiziellen Python-Dokumentation zu functools.

Was ist Methodenüberschreiben (Overriding) in Python?

Methodenüberschreiben bedeutet: Eine Kinderklasse (Subklasse) definiert eine Methode neu, die bereits in der Elternklasse (Superklasse) existiert. Der Methodenname und die Parameter bleiben gleich, aber der Inhalt (die Implementierung) ändert sich.

Das funktioniert in Python problemlos und ist ein Kernstück der objektorientierten Programmierung (OOP). Es ermöglicht dir, Verhalten zu verfeinern, ohne die ursprüngliche Klasse ändern zu müssen.

Stell dir vor: Die Elternklasse ist ein Standard-Drucker. Die Kindklasse ist ein Farbdrucker. Beide haben die Methode `drucke()`, aber der Farbdrucker überschreibt diese, um Farbe statt Schwarz-Weiß zu verwenden.

python
class Drucker:
    def drucke(self):
        print("Drucke in Schwarz-Weiss")


class Farbdrucker(Drucker):
    def drucke(self):
        # Diese Methode ueberschreibt die Methode aus Drucker
        print("Drucke in Farbe!")


# Standarddrucker
d = Drucker()
d.drucke()  # Ausgabe: Drucke in Schwarz-Weiss

# Farbdrucker nutzt die ueberschriebene Methode
f = Farbdrucker()
f.drucke()  # Ausgabe: Drucke in Farbe!

Die Elternklasse gibst du in Klammern nach dem Klassennamen an: `class Farbdrucker(Drucker)`. Python nutzt hier das Prinzip der Polymorphie (Vielgestaltigkeit): Der Aufruf ist identisch (`objekt.drucke()`), das Ergebnis ist aber spezifisch für das Objekt.

Python Überladen vs. Überschreiben: Was ist der Unterschied?

Um den Unterschied schnell zu erfassen, hilft ein direkter Vergleich:

Merkmal

Überladen (Overloading)

Überschreiben (Overriding)

Findet in

derselben Klasse

Eltern- und Kindklasse (Vererbung)

Parameter

unterschiedlich (Anzahl oder Typ)

identisch (Signaturen müssen passen)

Python-Support

nicht nativ (nur simuliert)

vollständig unterstützt

Ziel

Bequemlichkeit für verschiedene Eingaben

Spezialisierung von Verhalten

Alternative

Default-Werte, `*args`

`super()` nutzen

Merke: Überladen dient der Flexibilität innerhalb einer Klasse, Überschreiben dient der Anpassung von Verhalten in einer Vererbungshierarchie.

Wie sieht ein Praxisbeispiel aus?

Hier ist ein Szenario, das zeigt, wie beide Konzepte in der Praxis zusammenhängen. Wir simulieren Überladen über Default-Parameter und nutzen echtes Überschreiben für die Spezialisierung.

python
class Tier:
    def macheGeraeusch(self, lautstaerke=1):
        # Simuliertes Ueberladen durch Default-Parameter
        if lautstaerke > 5:
            print("Tier ist sehr laut!")
        else:
            print("Allgemeines Tiergeraeusch")


class Hund(Tier):
    def macheGeraeusch(self, lautstaerke=1):
        # Ueberschreibt die Methode aus Tier
        if lautstaerke > 5:
            print("Hund bellt laut: WUFF!!!")
        else:
            print("Wuff!")


class Katze(Tier):
    def macheGeraeusch(self, lautstaerke=1):
        # Ueberschreibt ebenfalls
        if lautstaerke > 5:
            print("Katze schreit: MIAU!!!")
        else:
            print("Miau!")


# Demonstration
tiere = [Tier(), Hund(), Katze()]

for tier in tiere:
    # Polymorphie: gleicher Aufruf, unterschiedliches Verhalten
    tier.macheGeraeusch(lautstaerke=10)

In diesem Beispiel nutzt die Basisklasse `Tier` einen Default-Parameter, um flexibel auf die Lautstärke zu reagieren (simuliertes Überladen). Die Unterklassen `Hund` und `Katze` überschreiben die Methode vollständig, um artspezifische Laute von sich zu geben.

Welche Fehler vermeidet man am besten?

Bei der Arbeit mit Vererbung und Methoden gibt es Klassiker, die jeder Anfänger einmal macht. Hier sind die wichtigsten Stolpersteine.

Fehler 1: Erwartung von echtem Überladen

Viele definieren zwei Methoden mit gleichem Namen und erwarten, dass Python "weiß", welche gemeint ist.

python
# FALSCH: Die erste Methode wird ignoriert
class Beispiel:
    def verarbeite(self, a):
        return a * 2

    def verarbeite(self, a, b):
        # Diese Definition ueberschreibt die obige!
        return a + b


b = Beispiel()
# b.verarbeite(5) wuerde hier einen Fehler werfen, da 'b' fehlt!

Lösung: Nutze immer Default-Parameter (`b=0`) oder `*args`.

Fehler 2: `super()` vergessen

Beim Überschreiben möchtest du oft das Verhalten der Elternklasse nicht löschen, sondern erweitern. Dafür brauchst du `super()`.

python
class Fahrzeug:
    def info(self):
        print("Ich bin ein Fortbewegungsmittel.")


class Auto(Fahrzeug):
    def info(self):
        # super().info() fehlt hier!
        print("Ich habe vier Raeder.")


a = Auto()
a.info()
# Ausgabe ist nur: "Ich habe vier Raeder."
# Der Teil aus Fahrzeug geht verloren.

Richtig ist es, die Elternfunktion explizit aufzurufen, um Code-Wiederholungen zu vermeiden (DRY-Prinzip: Don't Repeat Yourself).

Fehler 3: Signatur ändern beim Überschreiben

Überschreibende Methoden sollten dieselben Parameter akzeptieren wie die Elternmethode. Wenn du Parameter hinzufügst oder wegnimmst, kann es zu Fehlern kommen, wenn der Code expecting die Eltern-Signatur ist. Details zur korrekten Nutzung findest du in der Python Dokumentation zu Klassen.

FAQ: Python Überladen Überschreiben

Kann Python Methoden überladen?

Nein, im klassischen Sinne nicht. Python unterstützt kein statisches Overloading (mehrere Methoden gleicher Name mit unterschiedlicher Signatur). Du simulierst es jedoch über Default-Parameter (`b=0`) oder variable Argumentlisten (`*args`, `**kwargs`).

Was ist der genaue Unterschied zwischen Überladen und Überschreiben?

Überladen bedeutet, denselben Methodennamen für unterschiedliche Parameter in derselben Klasse zu nutzen (nativ in Python nicht möglich). Überschreiben bedeutet, eine Methode in einer Kindklasse neu zu definieren, um die Logik der Elternklasse zu ändern.

Wann nutze ich `super()`?

Du nutzt `super()` immer dann, wenn du beim Überschreiben eine Methode die Funktionalität der Elternklasse behalten und erweitern möchtest, anstatt sie komplett zu ersetzen.

Was passiert, wenn ich Parameter beim Überschreiben ändere?

Python wird das zwar nicht direkt verbieten, aber es kann zu Fehlern führen, wenn dein Programm polymorph arbeitet und erwartet, dass jedes Objekt der Kindklasse auch wie die Elternklasse genutzt werden kann (Liskovsches Substitutionsprinzip).

Gibt es eine Möglichkeit, Typen beim Überladen zu prüfen?

Ja, für fortgeschrittene Fälle gibt es `@functools.singledispatch`. Damit kannst du verschiedene Funktionen basierend auf dem Typ des *ersten* Arguments aufrufen.

Fazit

Zusammenfassend bleibt festzuhalten: Der Begriff Python Überladen Überschreiben deckt zwei völlig unterschiedlicheTechniken ab. Das Überladen (verschiedene Parameter für denselben Namen) ist in Python nicht nativ vorhanden und wird über Default-Parameter oder `*args` gelöst. Das Überschreiben hingegen ist essenziell für die Vererbung und erlaubt es dir, Klassen individuell anzupassen.

Wer diese Unterschiede verstanden hat, schreibt saubereren, objektorientierten Code und versteht, warum Python-Code oft anders aussieht als Java- oder C#-Code.

Brauchst du Hilfe bei Python oder anderen IT-Themen? Bei study-it.education findest du individuelle Nachhilfe, die genau da ansetzt, wo du hängst - ob OOP-Grundlagen, Algorithmen oder Projektarbeit.


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

Lerne den Unterschied zwischen Überladen und Überschreiben in Python. Der einfache Guide für Azubis, Studenten und Berufseinsteiger.

marcel.schmidtpeter@study-it.education →
Weiterlesen

Mehr Lesestoff

Python 5 min Lesezeit

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