* Teil der typing-Library
* ermöglicht es anzugeben welche Parameter-Kombinationen möglich sind, in dem die Funktionsdeklaration mehrfach angeben werden kann mit verschiedenen Parametern
* ermöglicht es %%*%%*kwargs in der eigentlichen Methoden zu nutzen, aber trotzdem mögliche Parameter zu listen, inkl. Typ
* macht kein eigentlichen Overloading
* man hat also nicht abhängig von den übergebenen Parametern verschiedene Methoden (um das zu realisieren siehe [[python:singledispatch]]
* statt dessen kann man verschiedene Parameter-Konstellationen beschreiben mit der die Methode aufgerufen werden kann (es wird aber letztendlich immer die gleiche Methode ausgeführt)
========== Mehrere Parameter-Kombinationen ==========
from typing import overload
@overload
def bla(eins:str, zwei:str):...
@overload
def bla(kaiser:str):...
def bla(kaiser=None, eins=None, zwei=None):
print(kaiser, eins, zwei)
bla(kaiser="Hallo")
Obiges Beispiel definiert eine Methode "bla" mit 3 Keyword-Argumenten. \\
Praktisch soll aber nur entweder "Kaiser" oder ("eins" und "zwei") setzbar sein, aber nicht alle 3 gleichzeitig. \\
Das wird erreicht in dem man mehrere Deklarationen mit @overload-Dekorator schreibt, nur diese definieren dann mit welchen Parametern die Methode dann jeweils aufgerufen werden kann (die Deklaration bei der Methodendefinition ist nicht sichtbar). \\ \\
**Hinweis:** Keyword-Argumente können scheinbar nur noch als Keyword-Argumente benutzt werden, nicht mehr als positional Arguments.
====== kwargs und vorgegebene Parameter ======
* normalerweise ist es nicht möglich bei der Nutzung von %%*%%*kwargs oder *args Hinting einzubauen welche Parameter möglich sind
from typing import overload
@overload
def bla(eins:str, zwei:str):...
def bla(**kwargs):
print(eins, zwei)
bla(kaiser="Hallo")
In obigem Beispiel benutzt die eigentliche Methode kwargs und hat damit alle Parameter als Dictionary zur Verfügung. \\
Gleichzeitig gibt es aber Hinting welche Keyword-Parameter möglich sind und welchen Typ sie haben -> das erfolgt per @upload-Dekorator und der darauf folgenden Deklaration.