Как я могу сказать PyCharm, какого типа должен быть параметр?

Когда дело доходит до конструкторов, назначений и вызовов методов, 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 будет красиво печатать информацию о параметрах вместо того, чтобы просто печатать все @-строки как есть.

169
задан Mr_and_Mrs_D 1 April 2016 в 18:08
поделиться