2012-01-27 13 views
5

Recientemente recogí PyCharm y estoy acostumbrado a una característica de Wing donde puedes decirle al IDE qué clase será un identificador particular (variable, atributo, lo que sea). Por ejemplo:¿Hay alguna manera de decirle explícitamente a PyCharm qué clase es un atributo de una instancia?

my_object = SomeClass() 
assert isinstance(my_object.my_attribute, SomeOtherClass) 

En este punto, Ala sabe exactamente lo que es my_object.my_attribute incluso si otro modo no podría comprenderlo a partir de análisis de código fuente.

Estoy buscando una característica similar en PyCharm. Sé cuál es un atributo particular de un objeto, pero PyCharm no, entonces, ¿cómo puedo decirlo, por lo que me puede dar útiles terminaciones?

pregunta relacionada: también veo una pregunta similar, How can I tell PyCharm what type a parameter is expected to be?, pero no cubre atributos, sólo parámetros.

Respuesta

7

Actualmente PyCharm también entiende la sintaxis 'assert isinstance', pero solo para referencias no calificadas. Yo he presentado un problema para apoyar esto para referencias cualificadas así:

http://youtrack.jetbrains.net/issue/PY-5614

En la versión actual, puede especificar el tipo de my_attribute yendo a la declaración de SomeClass y la adición de una cadena de documentación o epydoc esfinge para el atributo.

2

Esto es trabajo para mí (2.6.2)

class Rule (object): 
    def __init__(self, *args): 
     self.criteria = [] 
     """@type : list of Criterion""" 
     crit = self.criteria[0] 
     #on this line, code completion works for "crit" 
5

Si entiendo bien su pregunta lo que busca es la inferencia de tipos generales de PyCharm. Viniendo de un lenguaje estáticamente tipado, estaba desconcertado cuando utilicé la finalización del código y las opciones eran tan numerosas como los contenidos de la biblioteca de Python.

He encontrado que en PyCharm tiene la opción de recopilar información de tipo durante el tiempo de ejecución y hacer que esté disponible durante el tiempo de desarrollo (es decir, la finalización del código).

Aquí está cómo hacerlo ...

Preferencias> Python depurador> "Suma tipos en tiempo de ejecución para la comprensión de código"

Como "depuración" que el código (no usted no tiene que use punto de interrupción). PyCharm comenzará a proporcionar mejores sugerencias para la navegación/finalización de todos los códigos.

Saludos

Picture of Debug Preferences

Cuestiones relacionadas