Аннотации переменных типов, приводящие к предупреждениям - PullRequest
0 голосов
/ 29 октября 2019

Я новичок в разработке на Python и пытаюсь исправить ситуацию. Я использую Pycharm для разработки. В настоящее время я пытаюсь аннотировать типы переменных для более легкого доступа с автозаполнением и предложениями. Я пробовал итерации кода со смешанными результатами.

Этот код имеет проблему:

path = os.path.dirname(os.path.realpath(__file__))  # type: str
components = path.split(os.sep)  # type: list[str]

Первая проблема отображается на открывающей скобке аннотации типавторая строка. Там написано:

Class 'type' does not define '__getitem__', so the '[]' operator cannot be used on its instances.

Я погуглил, и хотя проблема кажется очевидной, открытие кода для класса list явно показывает метод __getitem__:

class list(object):
    """
    list() -> new empty list
    list(iterable) -> new list initialized from iterable's items
    """

....

    def __getitem__(self, y): # real signature unknown; restored from __doc__
        """ x.__getitem__(y) <==> x[y] """
        pass

Хорошо, может быть, это не тривиально для понимания, и есть какой-то другой механизм загрузки в работе. И, кроме того, «проблема» заключается в том, что я использовал list[str], а не List[str]. Поэтому я изменил код:

path = os.path.dirname(os.path.realpath(__file__))  # type: str
components = path.split(os.sep)  # type: List[str]

Теперь все ломается: вторая строка теперь жалуется на это:

Expected type 'List[str]', got 'List[str]' instead`

Предыдущая проблема, связанная с __getitem__, все еще сохраняется.

Есть ли способ аннотировать эти переменные, не вызывая проблем для проверки? Я не очень доволен документацией по Python в этом отношении, не указав явно типы возвращаемых значений их встроенных методов. Я должен полагаться на информацию, которую Pycharm предоставляет во всплывающих окнах документации (Ctrl + q).

1 Ответ

0 голосов
/ 30 октября 2019

Было правильным решением использовать List[str] вместо list[str], поскольку встроенные типы не могли использоваться в подсказках типов, соответствующий PEP еще не был принят.

Из какого модуля вы импортируете List? Я не могу воспроизвести проблему в 2019.3.

...