Когда дело доходит до конструкторов, назначений и вызовов методов, 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"? Мне было бы хорошо с этим.)
EDIT: Ответ 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
docstring.
Если вы также перейдете в меню "Файл" > "Настройки" > "Интегрированные инструменты на Python" и установите "Формат Docstring" в "Epytext", тогда PyCharm View > Quick Documentation Lookup будет довольно печатать информацию о параметрах, а не просто печатать все @-lines как -is.