Когда дело доходит до конструкторов, назначений и вызовов методов, 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,ниже, делает свое дело. Для новичков вроде меня, которым нужна краткая информация, вот оно:
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 Integrated Tools и установите "Docstring format" на "Epytext", тогда PyCharm View> Quick Documentation Lookup будет красиво печатать информацию о параметрах вместо того, чтобы просто печатать все @-строки как есть.