2017-08-13 2 views
1

Ich habe eine Funktion, die andere Python-Funktionen akzeptiert, die mit Typhinweisen versehen sind (__annotations__). Ich möchte diese Hinweise verwenden, um während der Laufzeit eine Typprüfung durchzuführen. Das Problem ist, dass Typklassen von Typisierungsmodul nicht sehr einfach zu arbeiten scheint (no isinstance, no issubclass). Also, frage ich mich, gibt es eine Möglichkeit, sie zu mypy-artigen Objekten zu konvertieren und dann mypy.subtypes.is_subtype zu verwenden, um Typen von Typhinweisen zu vergleichen?Vergleichen von Typen aus Python

+0

'inspect' Modul wird helfen. – stamaimer

Antwort

0

Die kurze Antwort ist es gibt keinen einfachen Weg. Das typing-Modul wird vom Design her nicht viel Hilfe für die Laufzeitprüfung bieten. PEP 484 sagt

Dieser PEP zielt darauf ab, eine Standardsyntax für Typen Anmerkungen zur Verfügung zu stellen, Öffnung Python-Code einfacher statische Analyse und Refactoring, mögliche Laufzeittypprüfung und (vielleicht in manchen Kontexten) Code Generation Verwendung von Typinformationen.

Von diesen Zielen ist die statische Analyse am wichtigsten. Dazu gehören Unterstützung für Offline-Typ-Checker wie mypy, sowie eine Standardnotation, die von IDEs für die Code-Vervollständigung und Refactoring verwendet werden können.

Nicht Ziele

Während der vorgeschlagene typing Modul einige Gebäude Blöcke zur Laufzeit Typprüfung enthält - insbesondere die get_type_hints() Funktion - Pakete von Drittanbietern haben würden implementieren spezifische entwickelt werden B. mit Dekoratoren oder Metaklassen. Die Verwendung von Typhinweisen für die Performance Optimierungen bleibt dem Leser als Übung überlassen.

+0

Ja, also meine Frage ist, wie man 'mypy' für die Überprüfung des Laufzeittyps verwendet. Ich verstehe, dass "Tippen" es nicht bietet, aber wie "Mypy" in den Code stecken, um seine Fähigkeiten zu nutzen? – Mitar