Cuando se trata de constructores, asignaciones y llamadas a métodos, PyCharm IDE es bastante bueno para analizar mi código fuente y averiguar qué tipo debe ser cada variable. Me gusta cuando es correcto, porque me da una buena información de parámetros y finalización de código, y me da advertencias si trato de acceder a un atributo que no existe.¿Cómo puedo decirle a PyCharm qué tipo de parámetro se espera que sea?
Pero cuando se trata de parámetros, no sabe nada. Los menús desplegables de finalización de código no pueden mostrar nada, porque no saben de qué tipo será el parámetro. El análisis de código no puede buscar advertencias.
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
peasant = Person("Dennis", 37)
# PyCharm knows that the "peasant" variable is of type Person
peasant.dig_filth() # shows warning -- Person doesn't have a dig_filth method
class King:
def repress(self, peasant):
# PyCharm has no idea what type the "peasant" parameter should be
peasant.knock_over() # no warning even though knock_over doesn't exist
King().repress(peasant)
# Even if I call the method once with a Person instance, PyCharm doesn't
# consider that to mean that the "peasant" parameter should always be a Person
Esto tiene un cierto sentido. Otros sitios de llamadas podrían pasar cualquier cosa por ese parámetro. Pero si mi método espera que un parámetro sea del tipo, digamos, pygame.Surface
, me gustaría poder indicar eso a PyCharm de alguna manera, de modo que pueda mostrarme todos los atributos de Surface
en su menú desplegable de finalización de código, y resaltar advertencias si llamo al método incorrecto, y así sucesivamente.
¿Hay alguna manera de dar una pista a PyCharm y decir "psst, se supone que este parámetro es del tipo X"? (O tal vez, en el espíritu de los lenguajes dinámicos "este parámetro se supone que graznar como un X" Estaría bien con eso?.)
EDIT: respuesta de CrazyCoder, a continuación, hace lo truco. Para cualquier recién llegados como yo que quieren el breve resumen, aquí está:
class King:
def repress(self, peasant):
"""
Exploit the workers by hanging on to outdated imperialist dogma which
perpetuates the economic and social differences in our society.
@type peasant: Person
@param peasant: Person to repress.
"""
peasant.knock_over() # Shows a warning. And there was much rejoicing.
La parte pertinente es la línea de la cadena de documentación @type peasant: Person
.
Si también va a Archivo> Configuración> Herramientas integradas de Python y establece "Formato de documento" a "Epytext", PyCharm's View> Búsqueda rápida de documentación imprimirá bastante la información del parámetro en lugar de solo imprimir todas las líneas @ como es.
es de notar que reStructuredText comentario por favor utilice las mismas etiquetas acaba de escribir de manera diferente: '@param xx: yyy' se convierte en': param xx: yyy'. Consulte http://www.jetbrains.com/pycharm/webhelp/creating-documentation-comments.html – Wernight
¿Por qué podemos salimos con la suya al no especificar un nombre de clase completamente calificado? – aitchnyu