Когда дело доходит до конструкторов, присваиваний и вызовов методов, среда 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/…Ответы:
Да, вы можете использовать специальный формат документации для методов и их параметров, чтобы PyCharm мог знать тип. Последняя версия PyCharm поддерживает большинство распространенных форматов документов .
Например, PyCharm извлекает типы из комментариев в стиле @param .
См. Также соглашения reStructuredText и docstring (PEP 257).
Другой вариант - аннотации Python 3.
Пожалуйста, обратитесь к разделу документации PyCharm для более подробной информации и примеров.
источник
Если вы используете Python 3.0 или более позднюю версию, вы также можете использовать аннотации для функций и параметров. PyCharm будет интерпретировать их как тип аргументов или возвращаемых значений:
Иногда это полезно для закрытых методов, которым не нужна строка документации. Как дополнительное преимущество, эти аннотации могут быть доступны по коду:
Обновление : Начиная с PEP 484 , принятого для Python 3.5, также является официальным соглашением указывать аргументы и возвращаемые типы с использованием аннотаций.
источник
typecheck-decorator
является одним из таких пакетов и имеет краткое изложение других в своей документации. (Гибко, также: вы можете даже печатать на утке с проверкой типа!)PyCharm извлекает типы из строки pydoc @type. Смотрите документы PyCharm здесь и здесь , а также документы Epydoc . Он находится в «устаревшем» разделе PyCharm, возможно, ему не хватает какой-то функциональности.
Соответствующей частью является
@type peasant: Person
строка документации.Мое намерение не состоит в том, чтобы украсть очки у CrazyCoder или оригинального спрашивающего, непременно дать им свои очки Я просто подумал, что простой ответ должен быть в ячейке «ответа».
источник
Я использую PyCharm Professional 2016.1 для написания кода py2.6-2.7 и обнаружил, что с помощью reStructuredText я могу выразить типы более лаконично:
См .: https://www.jetbrains.com/help/pycharm/2016.1/type-hinting-in-pycharm.html#legacy.
источник
Вы также можете утверждать для типа, и Pycharm выведет его:
источник