Biblioteca Python para detectar estaticamente tipos para nós AST.
Um bom caso de uso é um linhador que precisa executar algumas regras apenas para tipos específicos. Por exemplo, para verificar os argumentos de something.format(a=b) somente se something tiver tipo str .
python3 -m pip install astypesASTYPES usa astroid para inferir definições de nós. Portanto, se o seu código funcionar com nós AST, você precisará convertê -los em astroid primeiro:
import astroid
import astypes
module = astroid . parse ( source_code )
node = astypes . find_node ( module , ast_node )E quando você tem um nó astroidal, você pode obter seu tipo:
node_type = astype . get_node ( node )
print ( node_type . annotation )Exemplo:
import astroid
import astypes
node = astroid . extract_node ( '1 + 2.3' )
t = astypes . get_type ( node )
print ( t . annotation ) # 'float'Para um exemplo de uso do mundo real, consulte os tipos inferiores. É uma ferramenta de CLI que adiciona automaticamente anotações de tipo no código Python usando astypes.
Você pode encontrar a maior parte da lógica em astypes/_handlers.py. Resumidamente:
13 é sempre int .list(x) retorna list de tipos. Pode não ser verdade se você sombrear list com outra coisa.