Typisierungsmodul - String Literal Type

9

Ich benutze das neue Python 3.5-Modul tippt und es war sehr erfreulich .

Ich habe mich gefragt, wie man einen Typ basierend auf einem exakten String-Literal spezifizieren könnte. Zum Beispiel gibt eine Funktion garantiert eine der vier Zeichenfolgen zurück - "Norden", "Westen", "Osten", "Süden" - wie können wir das als spezifische Typvariable ausdrücken, anstatt nur str .

Ich habe die Dokumentation durchsucht und dabei den Union -Typ und die TypeVar -Funktion gefunden, konnte aber keine Antwort finden.

Eine Beispielfunktion, die dieses Problem ausdrückt:

%Vor%

Anstatt nur str zurückzugeben, möchte ich einen spezifischeren Typ angeben, der aus vier Werten besteht: "I" , "II" , "III" oder "IV" .

In Typoskript kann man folgendes machen: type Quadrant = "I" | "II" | "III" | "IV" - Gibt es einen schönen Python Zucker für diesen Anwendungsfall mit dem typing Modul?

    
fructosewizard 05.10.2016, 20:24
quelle

1 Antwort

1

Ungeachtet des typing Moduls, nach dem Sie gefragt haben, könnte eine Lösung für Ihr Problem die Verwendung eines Enum sein, wie in mehreren Kommentaren angenommen. Der Code dafür würde so aussehen:

%Vor%

Wie Sie sehen, können Sie den Namen und Wert der Enums verwenden. Der Name ist eine der Zeichenfolgen, nach denen Sie gefragt haben.

Ein Problem, das ich hier sehe, ist die fehlende else-Klausel in der Funktion und das aktuelle Verhalten von mypy, das None als gültigen Rückgabewert für Quadrant akzeptiert. Dies sollte manuell behandelt werden.

    
Lukisn 17.03.2017 10:15
quelle

Tags und Links