Подтвердить что ты не робот

Возможно ли иметь статические утверждения типа в PyCharm?

def someproperty(self, value):
    """
    :type value: int
    """
    assert isinstance(value, int)
    # other stuff

Я бы хотел, чтобы Pycharm утверждал, когда пользователь устанавливает значение в нечто, отличное от int. Я уже использую подсказку типа. Есть ли другой способ получить эту функциональность? Заранее благодарим за любую информацию, которую вы можете предоставить.

4b9b3361

Ответ 1

Используя pycharm, вы можете немного приблизиться к проверке статического типа, используя объявления типов и увеличивая степень проверки проверки типа:

введите описание изображения здесь

Это сделает проверки типов очень заметными в вашем коде:

введите описание изображения здесь

Ответ 2

Недавно у Python появилось большое развитие в области статической типизации. Начиная с Python 3.5, типы подсказок - вещь. Вот о чем PEP 0484. Синтаксис типа hinting полностью основан на синтаксисе аннотации функции, который был введен ранее с PEP 3107. Это позволило PEP 0484 быть изменением, которое не связано с новым синтаксисом, что делает его очень привлекательным и легко адаптируемым.

Итак, как это работает? Синтаксис на самом деле довольно интуитивно понятен для простых случаев. Например:

def greeting(name: str) -> str:
    return 'Hello ' + name

Система подсказок типа также поддерживает очень сложные вещи. Вы также можете использовать типы пользователей, вызывающие вызовы, множественные перегрузки, используя союзы, даже общие типы. Вы можете увидеть множество примеров в самом PEP.

Вы также можете посмотреть Guido van Rossums о типе, намекающем на последний PyCon, его действительно интересный и покрывающий множество деталей.

Наконец, со всеми этими подсказками типа, что мы с ними делаем? Ну, есть огромная библиотека, которая существует некоторое время, задолго до Python 3.5 и PEP 0484. На самом деле, официально введенный синтаксис типа намеков основан на этой библиотеке, но только формализован. Библиотека называется mypy и в основном представляет собой статический тип проверки для Python. При установке вы можете использовать исполняемый файл mypy для ввода типа Python script, который содержит аннотации типов.

Например, давайте поставим выше определение функции в файл и вызовите его с неправильными аргументами типа:

greeting(123)

Запуск mypy в файле, дает следующий результат:

$ mypy test.py
test.py:4: error: Argument 1 to "greeting" has incompatible type "int"; expected "str"

mypy, в то время как технически экспериментальный, является очень мощным инструментом, который работает очень хорошо. Если вы входите в эту вещь и будете принимать аннотации типа, то вам действительно нужно это проверить.

Ответ 3

PyCharm 5 похоже, поддерживает PEP 484, Таким образом, один ответ на этот вопрос для PyCharm 5 и Python 3.5 заключается в использовании намека типа.