Das Überladen von Funktionen ist möglicherweise nicht in Python integriert, es gibt jedoch Möglichkeiten, es nachzuahmen.
Das Überladen von Funktionen ist in einigen Programmiersprachen eine Funktion, mit der Sie Variationen derselben Funktion definieren können. Jede Variante hat den gleichen Namen, aber unterschiedliche Implementierungen mit eindeutigen Funktionssignaturen.
Mit dieser Technik können Sie verschiedene Operationen basierend auf der Art und Anzahl der an eine Funktion übergebenen Argumente ausführen.
Im Gegensatz zu Sprachen wie C++ und Java unterstützt Python standardmäßig keine Funktionsüberladung, es gibt jedoch Möglichkeiten, eine ähnliche Funktionalität zu erreichen.
Wie geht Python mit Funktionsüberladung um?
In Python können Sie dieselbe Funktion mehr als einmal mit unterschiedlichen Parametern, Datentypen oder beidem in jeder Definition definieren. Allerdings erkennt Python beim Aufruf nur die letzte Definition der Funktion. Hier ist ein Beispiel:
defarithmetics(a, b):
return a - bdefarithmetics(a, b, c, d):
return a + b - c * d
print(arithmetics(1, 2, 3, 5)) # returns -12
print(arithmetics(1, 2)) # returns missing positional arguments error
Objektorientierte Sprachen wie Java unterstützen häufig das Überladen von Funktionen und Methoden. Eine Methode ist einfach eine Funktion, die Sie innerhalb einer Klasse definieren.
Im obigen Code erkennt Python nur die zweite Definition von Arithmetik() Funktion, wenn Sie versuchen, sie in Ihrem Projekt aufzurufen. Wenn Sie versuchen, die Funktion mit zwei Argumenten wie zuerst definiert aufzurufen, erhalten Sie die Fehlermeldung „Erforderliche Positionsargumente fehlen“.
Wenn Sie die Funktion mit vier Argumenten aufrufen, erhalten Sie keine Fehlermeldung. Dies bedeutet, dass Python die Funktion mit ihrer neuesten Instanz überschrieben hat. Dies ist kein Überlastungsverhalten, daher müssen Sie dagegen vorgehen.
Daher verarbeitet Python standardmäßig keine Funktionsüberladung, es gibt jedoch einige Tricks, mit denen Sie das Verhalten in Ihren Programmen simulieren können.
Methode 1: Verwendung optionaler Parameter oder Standardargumente
Sie können eine Überladung erreichen, indem Sie eine Funktion mit Standardargumenten definieren. Hier ist ein Beispiel:
defarithmetics(a, b=0, c=0):
Arguments:
a: The first number.
b: The second number (optional).
c: The third number (optional).
return a - b + c
Diese Funktion hat drei Parameter, aber zwei davon haben Standardwerte. Das bedeutet, dass Sie es mit einem bis drei Argumenten aufrufen können:
print(arithmetics(1)) # returns 1
print(arithmetics(2, 5)) # returns -3
print(arithmetics(10, 3, 4)) # returns 11
Obwohl dieser Ansatz es Ihnen ermöglicht, die Funktion auf verschiedene Arten aufzurufen, ist er auf lange Sicht nicht sehr effektiv. Hier sind einige seiner Einschränkungen:
- Sie können nur Argumente übergeben, die entweder Ganzzahlen oder Gleitkommazahlen sind.
- Es gibt keine wesentliche Änderung im Verhalten der Funktion. Beispielsweise können Sie das Verhalten nicht ändern, um die Fläche einer Form zu berechnen oder sogar zu drucken Hallo Welt.
Methode 2: Variable Argumente verwenden
Um variable Argumente zum Überladen von Funktionen in Python zu verwenden, sollten Sie Folgendes tun Schließen Sie den Parameter args ein, wenn Sie Ihre Funktion definieren. Der args Mit dem Parameter können Sie beim Aufruf Ihrer Funktion mehrere Positionsargumente übergeben. Hier ist ein Beispiel:
defarithmetics(a, *args):
Arguments:
a: The first number.
*args: A variable number of arguments (optional).
args_sum = 0for num in args:
args_sum *= numreturn a - args_sum
print(arithmetics(1)) # returns 1
print(arithmetics(2, 5)) # returns 2
print(arithmetics(10, 3, 4, 2, 4, 6)) # returns 10
Die obige Funktion benötigt zwei Argumente: ein obligatorisches Argument namens A und das args Argument, mit dem Sie so viele Argumente eingeben können, wie Sie benötigen.
Obwohl sie mehrere Argumente annehmen kann, kann die obige Funktion die Multiplikationsoperation nur mit den variablen Argumenten durchführen, d. h. den Argumenten, die durch dargestellt werden args Stichwort.
Wenn Sie mehrere Vorgänge ausführen möchten, müssen Sie dies tun Fügen Sie bedingte Anweisungen in Ihren Code ein, und das kann schnell kompliziert werden.
Methode 3: Verwendung des Multiple Dispatch Decorator
Der Multiple Dispatch Decorator ist eine Python-Bibliothek, die es Ihnen ermöglicht, mehrere Implementierungen oder Instanzen einer einzelnen Funktion basierend auf dem Typ ihrer Argumente zu definieren. Das bedeutet, dass Sie dieselbe Funktion mit unterschiedlichen Datentypen definieren und ihr Verhalten vollständig ändern können.
Um den Multiple-Dispatch-Decorator zu verwenden, führen Sie die folgenden Schritte aus:
- Installieren Mehrfachdispath in Ihrer Python-Umgebung:
pip install multipledispatch
- Dekorieren Sie Ihre Veranstaltung(en) mit dem @versenden Dekorateur. Der @versenden Dekorateur ist ein Python-Dekorateur Dadurch können Sie einen Mehrfachversand realisieren. Basierend auf den Argumenten, die Sie ihm übergeben, wird automatisch die entsprechende Funktion ausgelöst. Du kannst den... benutzen @versenden Dekorateur, indem Sie diesem Muster folgen:
from multipledispatch import dispatch
@dispatch(data type1, data type2, data typeX)
defyour_function(a, b, c, x):
pass
# perform your operations here
Hier ist ein Beispiel, das den Multiple-Dispatch-Dekorator zum Überladen von Funktionen in Python verwendet:
from multipledispatch import dispatch
@dispatch(int, int)
defadd(a, b):
Arguments:
a: Any integer.
b: Any integer.
return a + b@dispatch(int, list)
defadd(a, b):
Arguments:
a: Any integer.
b: Any Python list.
b.append(a)
return b# returns 3
print(add(1, 2))
# returns [2, 3, 4, 5, 'w', 'done', 1]
print(add(1, [2, 3, 4, 5, 'w', 'done']))
Der obige Codeausschnitt definiert zwei Instanzen von hinzufügen() Funktion. Die erste Instanz verwendet zwei Ganzzahlen als Argumente und gibt deren Summe zurück.
Inzwischen akzeptiert die zweite Version dieser Funktion eine Ganzzahl und eine Liste. Es hängt die Ganzzahl an die Liste an und gibt die neue Liste zurück.
Dieser Ansatz zur Funktionsüberladung in Python bietet Ihnen viel Flexibilität, insbesondere wenn Sie das Verhalten Ihrer Methode ändern müssen. Mehr erfahren Sie hier Mehrfachversanddokumentation.
Der beste Ansatz zur Funktionsüberladung in Python
Der Ansatz, den Sie zur Funktionsüberlastung wählen, sollte davon abhängen, was Sie erreichen möchten. Wenn Sie Ihre Aufgabe mit Standard- oder variablen Argumenten erledigen können, ist der Multiple-Dispatch-Dekorator möglicherweise übertrieben. Aufgrund seiner Effizienz und Genauigkeit ist der Multiple-Dispatch-Decorator jedoch in der Regel die beste Option.
Dieser Dekorator bietet eine saubere und flexible Möglichkeit, Funktionsüberladung in Python zu implementieren. Sie können damit mehrere Implementierungen einer einzelnen Funktion basierend auf dem Typ ihrer Argumente definieren.
Mit diesem Ansatz können Sie flexible Funktionen erstellen, die verschiedene Parametertypen akzeptieren können, ohne dass komplexe bedingte Anweisungen erforderlich sind.