Когда дело доходит до конструкторов, присваиваний и вызовов методов, среда IDE PyCharm довольно хорошо анализирует мой исходный код и определяет тип каждой переменной. Мне нравится, когда это правильно, потому что это дает мне хорошее завершение кода и информацию о параметрах, и это дает мне предупреждения, если я пытаюсь получить доступ к атрибуту, который не существует.
Но когда дело доходит до параметров, он ничего не знает. В раскрывающихся списках завершения кода ничего не отображается, потому что они не знают, какого типа будет параметр. Анализ кода не может искать предупреждения.
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
Это имеет определенное количество смысла. Другие сайты вызовов могут передавать что угодно для этого параметра. Но если мой метод ожидает, что параметр имеет тип, скажем, pygame.Surface
я бы хотел как-то указать это PyCharm, чтобы он мог показать мне все Surface
атрибуты в раскрывающемся списке завершения кода и выделить предупреждения, если Я называю неправильный метод и так далее.
Есть ли способ, которым я могу дать подсказку PyCharm и сказать «psst, этот параметр должен иметь тип X»? (Или, возможно, в духе динамических языков «этот параметр должен крякать как X»? Я бы с этим согласился.)
РЕДАКТИРОВАТЬ: Ответ CrazyCoder, ниже, делает свое дело. Для тех новичков, как я, которые хотят получить краткое резюме, вот оно:
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.
Соответствующей частью является @type peasant: Person
строка документации.
Если вы также зайдете в меню «Файл»> «Параметры»> «Интегрированные инструменты Python» и установите для параметра «Формат строки документа» значение «Эпитекст», то в представлении PyCharm> Быстрый поиск документации будет просто напечатана информация о параметре, а не просто напечатаны все строки @ как есть.
@param xx: yyy
становится:param xx: yyy
. См. Jetbrains.com/pycharm/webhelp/…