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