2009-11-05 13 views

Respuesta

8

Esto realmente no responde a su pregunta, pero con Wing IDE puede dar pistas sobre el analizador de tipo con assert isinstance(b, A). Ver here. No he encontrado una manera de hacerlo con Komodo, aunque aparentemente es possible al escribir PHP o JavaScript.

actualización:

he encontrado una manera de engañar a Komodo en hacer esto:

if 0: b=A() 

Esto funciona (al menos en Komodo 5.2) y no tiene efectos secundarios, pero es seguro confundir a quien lea tu código

+1

¡Qué hack horrible! Estoy celoso de que lo hayas encontrado primero :) Habría +1 si no lo hubiera hecho todavía. –

+0

Creo que voy a cambiar a Wing IDE. La sintaxis de assert isinstance (b, A) funciona muy bien. –

+0

Me alegra descubrir que también funciona con mi configuración Emacs 24 + Jedi. –

3

No creo que tengas mucha suerte con esto. El problema es que es realmente bastante difícil inferir estáticamente el tipo de variables en Python, excepto en el caso más simple. A menudo, el tipo no se conoce hasta el tiempo de ejecución y, por lo tanto, la autocompletación no es posible.

El IDE hace un análisis estático para resolver las conjeturas obvias y mejores, pero apuesto a que ni siquiera está tratando de encontrar elementos en un contenedor. Aunque podemos deducir que b es de tipo A, incluso pequeñas variaciones en el código pueden hacerlo desconocido, especialmente porque está en un contenedor mutable.

Por cierto, he intentado esto con el IDE completo de Komodo y no es mejor. Escuché que Wing IDE tiene una excelente terminación de código, pero tampoco estoy seguro de que pueda hacerlo mejor.

+0

Entiendo que la inferencia de tipo automática es difícil. Lo que quiero hacer es inferencia de tipo manual. Echaré un vistazo a Wing mientras tanto. –

+0

Ah, lo entiendo ahora. Mi primer pensamiento fue la afirmación de que Interjay menciona, pero no funciona para Komodo. Lo único que puedo hacer es agregar 'b = A (b)', pero eso es horrible, no se garantiza que funcione y tiene efectos secundarios. –

+0

totalmente de acuerdo, creo que la finalización del código no funciona para los idiomas de python, por lo que, para mí, siempre estoy al tanto de lo que está sucediendo y SO – zinking

Cuestiones relacionadas