...это определение может быть выражено как строковый литерал, будет решено позже.
И это заставило меня задуматься, когда же «позже» и чем? Интерпретатор не пытается позже разрешить его как литерал, так что же он делает? Справедливо ли, что для этого написан сторонний инструмент?
Небольшой пример, демонстрирующий результат интерпретатора:
Код: Выделить всё
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}
Используя модуль ввода, пользовательский код может выполнять следующие действия:
Код: Выделить всё
>>> typing.get_type_hints(A().test)
{'a': , 'return': }
>>> typing.get_type_hints(B().test)
{'a': , 'return': }
Код: Выделить всё
>>> A().test.__annotations__
{'a': 'A', 'return': None}
Код: Выделить всё
>>> A().test.__annotations__
{'a': , 'return': None}
Подробнее здесь: https://stackoverflow.com/questions/553 ... -reference