Cuando se trata de constructores, asignaciones y llamadas a métodos, el IDE de PyCharm es bastante bueno para analizar mi código fuente y descubrir qué tipo debe ser cada variable. Me gusta cuando es correcto, porque me da un buen código completo e información de parámetros, y me da advertencias si intento acceder a un atributo que no existe.
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 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 de tipo, por ejemplo, pygame.Surface
me gustaría poder indicarle eso a PyCharm de alguna manera, para que pueda mostrarme todos Surface
los atributos 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 darle una pista a PyCharm y decir "psst, se supone que este parámetro es de tipo X"? (¿O tal vez, en el espíritu de los lenguajes dinámicos, "se supone que este parámetro grazna como una X"? Estaría bien con eso).
EDITAR: la respuesta de CrazyCoder, a continuación, hace el truco. Para cualquier recién llegado como yo que quiera el resumen rápido, 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 relevante es la @type peasant: Person
línea de la cadena de documentación.
Si también va a Archivo> Configuración> Herramientas integradas de Python y establece "Formato de cadena de documentos" en "Epytext", la Vista de PyCharm> Búsqueda rápida de documentación imprimirá bastante la información del parámetro en lugar de simplemente imprimir todas las líneas @ tal como están.
@param xx: yyy
convierte:param xx: yyy
. Ver jetbrains.com/pycharm/webhelp/…