Quand il s'agit de constructeurs, d'affectations et d'appels de méthodes, l'IDE PyCharm est plutôt bon pour analyser mon code source et déterminer le type de chaque variable. J'aime quand il est bon, parce qu'il me donne de bonnes informations sur la complétion du code et les paramètres, et il me donne des avertissements si j'essaie d'accéder à un attribut qui n'existe pas.
Mais lorsqu'il s'agit de paramètres, il ne sait rien faire. Les listes déroulantes de complétion de code ne peuvent rien afficher, car elles ne savent pas de quel type sera le paramètre. L'analyse du code ne peut pas rechercher les avertissements.
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
Cela a un certain sens. Les autres sites d'appel pourraient passer n'importe quoi pour ce paramètre. Mais si ma méthode attend d'un paramètre qu'il soit de type, disons, pygame.Surface
j'aimerais pouvoir l'indiquer à PyCharm d'une manière ou d'une autre, afin qu'il puisse me montrer tous les éléments suivants Surface
dans sa liste déroulante de complétion de code, et de mettre en évidence les avertissements si j'appelle la mauvaise méthode, etc.
Y a-t-il un moyen de donner un indice à PyCharm, et de dire "psst, ce paramètre est censé être de type X" ? (Ou peut-être, dans l'esprit des langages dynamiques, "ce paramètre est censé ressembler à un X" ? Cela me conviendrait parfaitement).
EDITAR: La réponse de CrazyCoder, ci-dessous, fait l'affaire. Pour les nouveaux venus qui, comme moi, veulent un résumé rapide, le voici :
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 partie pertinente est la suivante @type peasant: Person
de la docstring.
Si vous allez également dans Fichier > Paramètres > Outils intégrés Python et que vous définissez "Docstring format" sur "Epytext", alors la fonction Affichage > Recherche rapide de documentation de PyCharm imprimera joliment les informations des paramètres au lieu d'imprimer toutes les lignes @ telles quelles.
7 votes
Il est à noter que les commentaires reStructuredText utilisent les mêmes balises, mais sont écrits différemment :
@param xx: yyy
devient:param xx: yyy
. Voir jetbrains.com/pycharm/webhelp/1 votes
Pourquoi pouvons-nous nous en tirer sans spécifier le nom de classe entièrement qualifié ?