2017-08-13 3 views
1

J'ai une fonction acceptant d'autres fonctions Python qui sont annotées avec des indications de type (__annotations__). Je voudrais utiliser ces conseils pour faire un contrôle de type pendant l'exécution. Le problème est que les classes de type du module de typage ne semblent pas très faciles à utiliser (pas d'isinstance, pas issubclass). Donc, je me demande, est-il un moyen de les convertir en objets de type mypy, puis d'utiliser mypy.subtypes.is_subtype pour comparer les types de conseils de type?Comparer les types de typage Python

+0

Le module 'inspect' vous aidera. – stamaimer

Répondre

0

La réponse courte est qu'il n'y a pas de moyen facile. Le module typing est, par conception, ne va pas fournir beaucoup d'aide pour la vérification de l'exécution. PEP 484 dit

Ce PEP vise à fournir une syntaxe standard pour les annotations de type, ouverture code Python à l'analyse statique plus facile et refactoring, potentiel vérification du type d'exécution, et (peut-être, dans certains contextes) Code génération utilisant des informations de type.

Parmi ces objectifs, l'analyse statique est la plus importante. Cela inclut prise en charge des vérificateurs de type hors ligne tels que mypy, ainsi que une notation standard qui peut être utilisée par IDE pour l'achèvement du code et refactoring.

non objectifs

Alors que le module typing proposé contiendra un certain bâtiment blocs pour la vérification du type d'exécution - en particulier la fonction get_type_hints() - logiciels tiers devrait être mis au point pour mettre en œuvre spécifique fonctionnalité de vérification de type à l'exécution, par exemple utilisant des décorateurs ou des métaclasses. L'utilisation d'astuces de type pour les performances est laissée à titre d'exercice pour le lecteur.

+0

Oui, alors ma question est comment utiliser 'mypy' pour la vérification de type à l'exécution. Je comprends que 'typing' ne le fournit pas, mais comment brancher' mypy' dans le code pour utiliser ses capacités? – Mitar