Когда дело доходит до конструкторов, назначений и вызовов методов, PyCharm IDE довольно хорошо анализирует мой исходный код и выясняет, каким должен быть тип каждой переменной.Мне нравится, когда это правильно, потому что он дает мне хорошее завершение кода и информацию о параметрах, и он дает мне предупреждения, если я пытаюсь получить доступ к атрибуту, который не существует.
Но когда дело доходит до параметров,ничего не знаетВ раскрывающихся списках завершения кода ничего не отображается, потому что они не знают, какого типа будет параметр.Анализ кода не может искать предупреждения.
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'sОтвет, ниже, делает трюк.Для тех новичков, как я, которые хотят получить краткое резюме, вот оно:
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
строки документации.
Если вы также зайдете в File>Настройки> Интегрированные инструменты Python и установите «Формат Docstring» на «Epytext», затем PyCharm View> Quick Documentation Lookup будет просто печатать информацию о параметре, а не просто печатать все строки @ как есть.