Как разрешить аннотации типов для функций локальных типов с включенным PEP563 - PullRequest
0 голосов
/ 08 мая 2020

В Python 4.0 аннотации типов, такие как

foo:int

, будут обрабатываться как строка и должны быть динамически разрешены. Это можно выбрать с помощью python 3.7, используя from __future import annotations. Функция typing.get_type_hints попытается превратить строковые аннотации и другие прямые ссылки в фактические типы.

Мне нужна немного другая семантика, чем typing.get_type_hints, потому что я хотел бы обрабатывать наследование классов по-другому, хотя это выглядит при рассмотрении кода типа get_type_hints в любом случае не обрабатывает этот случай. Представьте себе следующий код:

from __future__ import annotations

def foo():
    class bar: pass
    def baz(a: bar): pass
    return baz

, если я посмотрю на аннотации возвращаемой функции, я увижу что-то вроде

{'a': 'bar'}

Примерно то, что typing.get_type_hints делает в этом случае, - это попытки найти словарь локальных и глобальных переменных для перехода в eval. Но как мне это сделать здесь? Как мне найти набор локальных переменных, в котором a будет преобразовываться в класс bar, локальный для вызова foo, который произвел baz, который я исследую?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...