Оценивает ли Python подсказку типа прямой ссылки?Python

Программы на Python
Anonymous
Оценивает ли Python подсказку типа прямой ссылки?

Сообщение Anonymous »

Я просматривал раздел PEP 484 «Прямые ссылки» и заметил утверждение:

...это определение может быть выражено как строковый литерал, будет решено позже.

И это заставило меня задуматься, когда же «позже» и чем? Интерпретатор не пытается позже разрешить его как литерал, так что же он делает? Справедливо ли, что для этого написан сторонний инструмент?
Небольшой пример, демонстрирующий результат интерпретатора:

Код: Выделить всё

class A:
def test(self, a: 'A') -> None:
pass
class B:
def test(self, a: A) -> None:
pass

>>> A().test.__annotations__
{'a': 'A', 'return': None}
>>> B().test.__annotations__
{'a': , 'return': None}
Если я правильно понимаю аннотации функций и подсказки типов, Python на самом деле не делает ничего с ними во время выполнения для повышения производительности, а скорее интроспективное использование позволяет строго сторонним приложениям, таким как линтеры, IDE и инструменты статического анализа (такие как mypy), использовать преимущества их доступности. Так будут ли эти инструменты пытаться разрешить подсказку типа «A» вместо того, чтобы поручить эту работу интерпретатору, и если да, то как они это сделают?
Используя модуль ввода, пользовательский код может выполнять следующие действия:

Код: Выделить всё

>>> typing.get_type_hints(A().test)
{'a': , 'return': }
>>> typing.get_type_hints(B().test)
{'a': , 'return': }
Однако мой вопрос направлен на то, несет ли Python какую-либо ответственность за обновление __annotations__ функции из строкового литерала, то есть при изменении во время выполнения:< /p>

Код: Выделить всё

>>> A().test.__annotations__
{'a': 'A', 'return': None}
чтобы...

Код: Выделить всё

>>> A().test.__annotations__
{'a': , 'return': None}
Если Python этого не делает, то зачем мне строковый литерал в качестве подсказки типа, отличный от самодокументированного кода? Какую ценность первая форма дает мне, пользователю или стороннему инструменту?

Подробнее здесь: https://stackoverflow.com/questions/553 ... -reference

Вернуться в «Python»