2017-08-23 1 views
3

Ich möchte die Annotationen bei Funktionen oder Klassenmethoden erhalten. Wenn der Typ Hinweise in den Quellcode geschrieben wird, kann ich Typen erhalten, indem ich Attribut __annotations__ bekomme.Wie bekomme ich Annotation von Stub-Dateien (.pyi) zur Laufzeit in Python?

def hoge(n: int): ... 
print(hoge.__annotations__) # {'n': <class 'int'>} 

Aber ich weiß nicht, wie man Typen in Stub-Dateien (.pyi) geschrieben bekommt.

# .pyi 
def fuga(n: int): ... 

# .py 
def fuga(n): ... 
print(fuga.__annotations__) # {} 

Gibt es eine coole Methode?

Antwort

1

Von PEP-484:

Stub-Dateien sind Dateien Typ Hinweise enthalten, die nur für die Verwendung durch den Typ-Checker sind, nicht zur Laufzeit. Es gibt mehrere Anwendungsfälle für Stub-Dateien:

  • Erweiterungsmodule
  • Module von Drittanbietern, deren Autoren noch nicht hinzugefügt Typ Hinweise
  • Standard-Bibliotheksmodule für welche Hinweise noch nicht geschrieben worden
  • Module, die mit Python 2 und 3
  • Module kompatibel sein müssen, die Anmerkungen für andere Zwecke
012 verwenden

Leider gibt es keine Möglichkeit, die Anmerkungen zu erhalten, und wie sie interpretiert werden, liegt im Ermessen des Typprüfers. Und das hat den Nebeneffekt, dass es keine autorisierende Ressource gibt, um zu überprüfen, ob Ihre Typhinweise korrekt sind.

Die nächste ist mypy.

+0

Melvyn, Ihre Meinung ist richtig. Die Art und Weise, wie der Typ zur Laufzeit aus der Stubdatei abgerufen wird, wird nicht offiziell unterstützt. Ich dachte jedoch, dass es durch irgendeine Methode erhalten werden könnte, und stellte eine Frage. Es scheint, dass 'mypy' den Syntaxbaum erstellt und Typhinweise erhält. Wenn wir den Syntaxbaum zur Laufzeit abrufen und ihn mit dem Syntaxbaum der Stub-Datei vergleichen, ist es möglich, einen Typhinweis zu erhalten. Aber ich gab auf, weil es zu schwierig ist. Danke. – Hiroshiba

Verwandte Themen